Activerecord Rails 4.0-如何基于子对象的ID获取对象集合?

Activerecord Rails 4.0-如何基于子对象的ID获取对象集合?,activerecord,ruby-on-rails-4,Activerecord,Ruby On Rails 4,我正在尝试创建一种搜索功能,以获取所有当前_用户的成员,这些成员都有一个关联的游戏,具有特定的id 我试过: @members = current_user.members.where(:games.id => params[:id]) 但我得到: undefined method `id' for :games:Symbol 在Rails中如何实现这一点 更新:模型关联 类成员:销毁 有很多:游戏,:通过=>:游戏\u成员,:uniq=>正确 结束 类GamesMembers:gam

我正在尝试创建一种搜索功能,以获取所有当前_用户的
成员
,这些成员都有一个关联的
游戏
,具有特定的
id

我试过:

@members = current_user.members.where(:games.id => params[:id])
但我得到:

undefined method `id' for :games:Symbol
在Rails中如何实现这一点

更新:模型关联

类成员:销毁
有很多:游戏,:通过=>:游戏\u成员,:uniq=>正确
结束
类GamesMembers:销毁
有很多:成员,:至=>:games\u成员,:uniq=>true
结束

在哪里可以找到列名,在这种情况下,一列成员表不作为引用:

这应该起作用:

 @members = current_user.members.each { |m|
  m.games.each { |g|
    g.id == params[:id]
  }
 }

请测试。

您是否有
会员
型号的外键字段
游戏id
?如果是,请尝试以下方法:

@members = current_user.members.where(game_id: params[:id])
为未来谷歌用户更新了

我发现这是实现这一目标的正确途径

@members=current\u user.members.join(:games\u members)。其中(:games\u members=>{:games\u id=>params[:id]})
SnareChops

我认为您不需要这两种型号的
都有很多:游戏成员。试着不用它。与此相反,您需要从成员更改为
has\u和\u-belishing\u-to\u-many:games
,从游戏更改为
has\u和\u-belishing\u-to\u-many:members
。整个关系不应与中间表
games\u成员
,而是
member.games
games.members

因此,如果协会的建立方式正确,那么应该是:

@members = current_user.members.joins( :games ).where( games: { id: params[id] } )

如果您需要澄清,请告诉我。

这是一个与联接表的多对多关系,因此我没有列游戏id。谢谢。好的。您在
会员
游戏
habtm
有许多到
之间使用什么类型的关联?我目前正在使用
有许多到
。我将在上面发布代码。是的,我认为这是一种正常的方式。
#使用
查找
:all
?真正地它从3开始就被弃用,在4中被删除。@ukaszNiemier那么你能用新的Rails 4路启发我,而不是仅仅投票给我吗?至少在这篇文章中为未来的人们做这件事……这并不难找到。
@members = current_user.members.joins( :games ).where( games: { id: params[id] } )