0

我正在尝试制作一种搜索功能,该功能将获取所有与特定members关联的 current_usersgameid

我试过了:

@members = current_user.members.where(:games.id => params[:id])

但我得到:

undefined method `id' for :games:Symbol

这将如何在 Rails 中完成?

更新: 模型关联

class Member < ActiveRecord::Base
    has_many :games_members, :dependent => :destroy
    has_many :games, :through => :games_members, :uniq => true
end

class GamesMembers < ActiveRecord::Base
    self.primary_key [:game_id, :member_id]
    belongs_to :members
    belongs_to :games
end

class Game < ActiveRecord::Base
    has_many :games_members, :dependent => :destroy
    has_many :members, :through => :games_members, :uniq => true
end
4

4 回答 4

2

小军刀,

我认为您不需要has_many :games_members任何一种模型。尝试不使用它。取而代之的是,您需要has_and_belongs_to_many :games从会员和has_and_belongs_to_many :members游戏更改为。整个关系不应该是与中间表games_members,而是member.gamesgame.members

那么,如果关联设置正确,它应该是这样的:

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

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

于 2013-09-22T00:42:46.693 回答
0

where 是查找列名,在这种情况下,成员表的列没有引用:

这应该工作:

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

请测试。

于 2013-09-21T20:22:11.030 回答
0

你有模型的外键字段game_idMember?如果是这样,试试这个:

@members = current_user.members.where(game_id: params[:id])
于 2013-09-21T20:22:23.327 回答
-1

为未来的谷歌用户更新

我发现这是实现这一目标的正确方法

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

于 2013-09-21T21:50:14.267 回答