2009-05-24 1 views
1

Я читал просто Rails Патрик Ленц ... может быть, я что-то пропустил, кажется, что всякий раз, когда мы помещаемв Ruby on Rails, делает map.resources: рассказы сразу делают Story RESTful?

map.resources :stories 

в routes.rb

затем немедленно, контроллер будет иметь специальную конвенцию и теперь История - ресурс RESTful? Возможно, автор использовал ресурс слов, но не упомянул, что это RESTful, но они одно и то же?

+0

Разговор о трате времени. Мне потребовалось около 2 часов, чтобы понять это – Gutzofter

ответ

4

Наличие в маршрутах означает, что вы автоматически получаете стандартные маршруты, которые помогут вам создать спокойное приложение. Например:

new_story GET  /story/new(.:format) {:action=>"new", :controller=>"stories"} 
edit_story GET  /story/edit(.:format) {:action=>"edit", :controller=>"stories"} 
    story GET  /story(.:format)  {:action=>"show", :controller=>"stories"} 
      PUT  /story(.:format)  {:action=>"update", :controller=>"stories"} 
      DELETE /story(.:format)  {:action=>"destroy", :controller=>"stories"} 
      POST /story(.:format)  {:action=>"create", :controller=>"stories"} 

Только наличие одной строки в файле маршрутов дает вам все эти пути для использования. Вам просто нужно убедиться, что вы обеспечиваете правильную функциональность в новых, редактируете, показываете, обновляете, уничтожаете и создаете действия своего контроллера рассказов, и у вас будет спокойный дизайн.

Для того чтобы увидеть, что доступно маршрут-мудрый, вы можете перейти в папку приложения и дать команду:

rake routes 

Это собирается вывести все пути, доступные для Вас, основываясь на том, что вам вошли в ваш файл маршрутов.

1

Да. Как только вы добавите это на свои маршруты, ваш контроллер Story ответит на обычные глаголы REST ожидаемыми способами.

2

НО НО !!! Если у вас есть другие действия в контроллере, они НЕ будут найдены, если вы не вводите дополнительные маршруты ВЫШЕ, что .resources line!

Так что если у вас есть действие называется turn_page в контроллере историй вам необходимо включить map.connect линию до линии map.resources - как в этом фрагменте кода:

map.connect 'stories/turn_page', :controller => 'stories', :action => 'turn_page' 
map.resources :stories 

Надежда, что помогает кто-то! Я застрял в течение нескольких часов, работая над этим, так как все примеры - это «обычные» маршруты или набор REST, определенный с помощью инструкции .resources!

Смежные вопросы