为什么rails在多个位置创建具有相同参数的嵌套资源路由?

时间:2014-12-27 20:18:59

标签: ruby-on-rails ruby ruby-on-rails-4

我的模型父级有很多子级,而子级属于父级

class Parent < ActiveRecord::Base
  has_many :children
end
class Child < ActiveRecord::Base
  belongs_to :parent
end

我已经嵌套了这样的路线

resources :parents do
  resources :children
end

当我运行 rake routes 命令时,我得到了这个:

parent_children    GET    /parents/:parent_id/children(.:format)          children#index
                   POST   /parents/:parent_id/children(.:format)          children#create
 new_parent_child  GET    /parents/:parent_id/children/new(.:format)      children#new
edit_parent_child  GET    /parents/:parent_id/children/:id/edit(.:format) children#edit
     parent_child  GET    /parents/:parent_id/children/:id(.:format)      children#show
                   PATCH  /parents/:parent_id/children/:id(.:format)      children#update
                   PUT    /parents/:parent_id/children/:id(.:format)      children#update
                   DELETE /parents/:parent_id/children/:id(.:format)      children#destroy
          parents  GET    /parents(.:format)                              parents#index
                   POST   /parents(.:format)                              parents#create
       new_parent  GET    /parents/new(.:format)                          parents#new
      edit_parent  GET    /parents/:id/edit(.:format)                     parents#edit
           parent  GET    /parents/:id(.:format)                          parents#show
                   PATCH  /parents/:id(.:format)                          parents#update
                   PUT    /parents/:id(.:format)                          parents#update
                   DELETE /parents/:id(.:format)                          parents#destroy

请注意,parent_controller中的 params [:id] 与childrens_controller中的不同。有这么好的理由吗?它应该不只是 params [:parent_id] params [:child_id]

目前,我无法从一个控制器链接到另一个控制器,而不会引发异常:

No route matches {:action=>"new", :controller=>"parents", :id=>"3"} missing required keys: [:parent_id]

我确实理解了这条错误消息,而且我找到了一个不太好的黑客来解决它。但你怎么解决这个问题呢?我在这里完全遗漏了什么吗?

编辑:

链接是从父级#show 儿童#new ,看起来像这样:

link_to 'new child', new_parent_child_path

1 个答案:

答案 0 :(得分:1)

<%= link_to 'new child', new_parent_child_path(@parent) %>

其中@parent是父对象。

是不适合你的?

我不知道怎么做,但我认为你是以某种方式传递:id而不是:parent_id