我有 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]。因此,错误。