学习rails并遇到routes.rb中的这些嵌套资源
resources :posts do
resources :comments
end
鉴于帖子和评论之间存在关联(帖子有很多评论,评论属于帖子),我可以在上面的代码中以类似的方式看到关联
但为什么我们需要嵌套资源而不是简单地声明
resources :posts
resources :commments
两者在某些方面是否相同?
答案 0 :(得分:3)
想象一下,您希望让用户导航到:
# GET
http://yoursite.com/posts/1/comments
这样您就可以查看与ID为1的帖子相关联的评论列表。
您需要使用以下内容来执行此操作:
resources :posts do
resources :comments
end
但是,如果你有以下路线:
resources :posts
resources :commments
你必须传递一个参数,它看起来像:
# Get
http://yoursite.com/comments/?post=1
第一种方法使它更简单,更整洁!
您可以在the Rails manual上阅读有关路由的大量内容。还有nested resources的特定部分。
答案 1 :(得分:1)
对于关联,建议使用嵌套路由。拥有逻辑上其他资源的子资源是很常见的。例如,假设您的应用程序包含以下模型:
class Magazine < ActiveRecord::Base
has_many :ads
end
class Ad < ActiveRecord::Base
belongs_to :magazine
end
嵌套路由允许您在路由中捕获此关系。在这种情况下,您可以包含此路由声明:
resources :magazines do
resources :ads
end
然后 GET
/magazines/:magazine_id/ads
显示特定杂志的所有广告列表