Rails 3路由问题:子资源

时间:2011-04-01 18:44:43

标签: ruby-on-rails ruby routes

我有2个模型:用户和兴趣。

要获得特定用户的兴趣,您可以访问以下网址:

/users/1/interests

现在我的问题。每个用户可以有几个孩子,这是对其他用户的引用。现在我想通过这样做来得到一个特定的孩子:

/users/1/children/1/interests

但我不确定如何在routes.rb中设置它。两个URL都应该在interests_controller中调用show动作,我只想在这里检查:

def show
  @user = User.find params[:id]
  if params[:child_id]
    @user = @user.children.find_by_id params[:child_id]
  end
  @interests = @user.interests
end 

所以我想对两个URL使用相同的interests_controller,但我不知道如何在我的routes.rb中写出它?

1 个答案:

答案 0 :(得分:0)

这是您需要进行嵌套的最佳资源:http://weblog.jamisbuck.org/2007/2/5/nesting-resources

在您的情况下,它可能看起来像这样:

map.resources :users do |users|
  users.resources :children do |children|
    children.resources :interests
  end
end

但是,正如他在文章中提到的那样,我也会建议不要这样做。这种类型的URL与简单的/children/[id]/interests和会话的良好使用没有实际的好处,并且它更容易维护。