我有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(以及更多)。
答案 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_id
向superdad
提供http://localhost:3000/dads/superdad/moms
。在您的情况下,您正在寻找不存在的params [:id]。因此,错误。