无法通过关联找到没有带has_many的ID的[model]

时间:2014-04-06 15:46:50

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

我有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

我试图去找爸爸&#39;通过寻找任何妈妈而不仅仅是通过爸爸的孩子来寻找妈妈:

http://localhost:3000/dads/superdad/moms

resources :dads do
  resources :kids
  resources :moms
end

在我的妈妈控制器中,我试图找到&#34; superdad的编号&#34;:

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])

当妈妈没有直接识别它时,是否可以这样使用@dad?你有什么建议我这样做?我需要在妈妈的索引页面上找到@ dad.name(以及更多)。

1 个答案:

答案 0 :(得分:4)

使用此:

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_idsuperdad提供http://localhost:3000/dads/superdad/moms。在您的情况下,您正在寻找不存在的params [:id]。因此,错误。