我正在尝试制作一种搜索功能,该功能将使所有current_users'members
具有关联的game
具有特定id
我试过了:
@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
答案 0 :(得分:2)
SnareChops,
我认为在任何一种模型中都不需要has_many :games_members
。试试没有它。相反,您需要从成员更改为has_and_belongs_to_many :games
,并从游戏更改为has_and_belongs_to_many :members
。整个关系不应该与中间表games_members
相关,而应该是member.games
和game.members
。
那么,如果以正确的方式建立关联,那么它应该是:
@members = current_user.members.joins( :games ).where( games: { id: params[id] } )
如果您需要澄清,请告诉我。
答案 1 :(得分:0)
在哪里找到一个列名,在这种情况下,一列成员表没有引用:
这应该有效:
@members = current_user.members.each { |m|
m.games.each { |g|
g.id == params[:id]
}
}
请测试。
答案 2 :(得分:0)
您是否拥有game_id
型号的外键字段Member
?如果是这样,试试这个:
@members = current_user.members.where(game_id: params[:id])
答案 3 :(得分:-1)
更新
我发现这是实现这一目标的正确方法
@members = current_user.members.joins(:games_members).where(:games_members => {:game_id => params[:id]})