轨道上的红宝石 - 找不到没有通过关联has_many ID 的 [模型]



我有 3 种型号 - 妈妈、爸爸和孩子。爸爸妈妈只通过孩子属于对方,所以联想是这样的:

class Kid < ActiveRecord::Base
  belongs_to :mom
  belongs_to :dad
end
class Mom < ActiveRecord::Base
  has_many :kids
  has_many :dads, through: :kids
end
class Dad < ActiveRecord::Base
  has_many :kids
  has_many :moms, through: :kids
end

我试图通过寻找任何妈妈来找到爸爸的妈妈,而不仅仅是通过爸爸的孩子:

http://localhost:3000/dads/superdad/moms
resources :dads do
  resources :kids
  resources :moms
end

在我的妈妈控制器中,我试图找到"超级爸爸"的ID:

def index
   @dad = Dad.find(params[:id])
   if params[:q].present?
     @moms = Mom.search(params[:q], page: params[:page], per_page: 25)
   else
     @moms = Mom.none
   end
end

但是遇到此错误:

Couldn't find Dad without an ID  
# line 8 @dad = Dad.find(params[:id])

当妈妈没有直接ID时,是否可以以这种方式使用@dad?你建议我怎么做?我需要在妈妈的索引页面上访问@dad.name(以及更多)。

使用这个:

def index
   @dad = Dad.find(params[:dad_id])
   if params[:q].present?
     @moms = Mom.search(params[:q], page: params[:page], per_page: 25)
   else
     @moms = Mom.none
   end
end

使用 params[:dad_id] 而不是 params[:id] 。原因是为 MomsController 的索引操作生成的路由将是:

dad_moms GET    /dads/:dad_id/moms(.:format)          moms#index

params[:dad_id]会给你dad_id superdad http://localhost:3000/dads/superdad/moms.在您的情况下,您正在寻找不存在的参数[:id]。因此,错误。

相关内容

  • 没有找到相关文章

最新更新