为什么rails有嵌套资源?

时间:2015-03-09 02:36:34

标签: ruby-on-rails rails-routing

学习rails并遇到routes.rb中的这些嵌套资源

resources :posts do
    resources :comments
end

鉴于帖子和评论之间存在关联(帖子有很多评论,评论属于帖子),我可以在上面的代码中以类似的方式看到关联

但为什么我们需要嵌套资源而不是简单地声明

resources :posts
resources :commments

两者在某些方面是否相同?

2 个答案:

答案 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

显示特定杂志的所有广告列表