2015-03-09 4 views
1

обучения рельсы и наткнулись на этих вложенных ресурсы в routes.rbПочему у рельсов есть вложенные ресурсы?

resources :posts do 
    resources :comments 
end 

Учитывая, что существует связь между публикациями и комментариями (пост имеет много комментариев, принадлежит комментарий к сообщению), я могу отчасти увидеть связь подобным способом в коде выше

но зачем нам нужны вложенные ресурсы, как противостоять просто объявить

resources :posts 
resources :commments 

Являются два то же самое в некоторых аспектах?

ответ

3

Представьте, что вы хотите, чтобы ваши пользователи перейти к:

# GET 
http://yoursite.com/posts/1/comments 

Это позволит вам просматривать список комментариев, связанных с должности с идентификатором 1.

Вы должны использовать ниже, чтобы сделать это:

resources :posts do 
    resources :comments 
end 

Однако, если у вас была ниже маршрутов:

resources :posts 
resources :commments 

Вам придется пройти и параметров будет выглядеть примерно так:

# Get 
http://yoursite.com/comments/?post=1 

Первый подход делает его более простым и аккуратным!

Обновление:

Вы можете прочитать кучки о маршрутизации на the Rails manual. Также есть специальный раздел для nested resources.

1

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

class Magazine < ActiveRecord::Base 
    has_many :ads 
end 

class Ad < ActiveRecord::Base 
    belongs_to :magazine 
end 

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

resources :magazines do 
    resources :ads 
end 

Тогда ПОЛУЧИТЬ

/magazines/:magazine_id/ads 

отобразить список всех объявлений для конкретного журнала