2013-09-21 84 views
0

我試圖做一個排序搜索功能,將讓所有的CURRENT_USERS' members有相關聯的game與特定idRails 4.0 - 如何根據子對象的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 

回答

-1

修訂爲未來的谷歌用戶

這是我發現的是實現這一目標的

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

+0

是的,我認爲這是一種正常的方式。 – Psylone

+0

'#find' with':all'?真?它從3開始被棄用,並在4中被刪除。 – Hauleth

+0

@ŁukaszNiemier那麼你能否用新的Rails 4方式來啓發我,而不是僅僅投票給我?至少爲未來發生在這篇文章上的人做... – SnareChops

0

的地方是要找到一個列名,在這種情況下成員表中的列不參考:

這應該工作:

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

請測試。

0

您是否擁有Member型號的外鍵字段game_id?如果是的話,試試這個:

@members = current_user.members.where(game_id: params[:id]) 
+0

這是一個與連接表的多對多關係,所以我沒有列game_id。謝謝你。 – SnareChops

+0

好的。你在'Member'和'Game','habtm'或'has_many through'之間使用了什麼類型的關聯? – Psylone

+0

我目前正在使用'has_many through'。我將發佈上面的代碼。 – SnareChops

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

讓我知道你是否需要澄清。