2011-06-14 43 views
1

數組發現條件ID我有2種型號(playerteam通過模型lnkteamplayer鏈接)找到所有:在值

Team has_many players through lnkteamplayer 
Player has_many teams through lnkteamplayer 

我需要檢索不屬於特定團隊的所有球員。

<% @players = Player.find(:all, :conditions => ["id != ?",@team.lnkteamplayers.player_id ]) %> 

上面的代碼行出現錯誤。我的問題是如何在上述條件中傳遞一組值。

感謝您提供的任何建議。

回答

6

你有一對夫婦的問題有:

1)條件的第一部分,「ID =!?」,是SQL的片段,並在SQL這樣做「不等於」爲<>不是!=。例如:"id <> ?"

2)要使用數組,sql語法是id in (1,2,3)id not in (1,2,3)。在你的情況,你可以做到這一點像:conditions => ["id not in (?)", array_of_ids]

所以,你可以在一個團隊這樣讓玩家不:

@team = Team.find(params[:team_id]) 
@not_on_team = Player.find(:all, :conditions => ["id not in (?)", @team.player_ids]) 
0

由於您還沒有提供錯誤訊息,因此我在這裏猜測。但是,我不認爲!=在許多SQL方言中是有效的語法。您可能正在尋找類似NOT IN()的東西。

另外,@team.lnkteamplayers.player_id可能不起作用,因爲從@team.lnkteamplayers返回的值可能沒有player_id方法;您可能需要實際玩家的ID。

這可以使用像@team.lnkteamplayer_ids這樣的東西來完成。

總而言之,你行可能需要像

<% @players = Player.find(:all, :conditions => ["id NOT IN (?)", @team.lnkteamplayer_ids]) %> 

,但沒有我們不能肯定地說,瞭解更多信息。

+0

非常感謝您的建議,但我在「lnkteamplayers」表2場代表玩家ID和團隊ID。如果我做這樣的事情: – tanya 2011-06-14 13:33:47

+1

@Jakob S - 這將匹配玩家ID對抗lnkteamplayer id,因此不工作... – 2011-06-14 13:34:26

+0

@players = Player.find(:all,:conditions => [「id NOT IN(? )「,@ team.lnkteamplayers [0] .player_id]) – tanya 2011-06-14 13:34:41