Rails 4.0 - 如何根据子对象的ID获取对象集合?

时间:2013-09-21 20:08:46

标签: activerecord ruby-on-rails-4

我正在尝试制作一种搜索功能,该功能将使所有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

4 个答案:

答案 0 :(得分:2)

SnareChops,

我认为在任何一种模型中都不需要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] } )

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

答案 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]})