我有两个模型(player
和team
通过模型lnkteamplayer
链接)
Team has_many players through lnkteamplayer
Player has_many teams through lnkteamplayer
我需要检索所有不属于特定团队的玩家。
<% @players = Player.find(:all, :conditions => ["id != ?",@team.lnkteamplayers.player_id ]) %>
我收到上述代码行的错误。我的问题是如何在上述条件下传递一组值。
感谢您提供的任何建议。
答案 0 :(得分: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])
答案 1 :(得分:0)
由于您没有提供错误消息,我在这里猜测。但是,我不认为!=
是许多SQL方言中的有效语法。您可能正在寻找类似NOT IN ()
的内容。
此外,@team.lnkteamplayers.player_id
可能无效,因为从@team.lnkteamplayers
返回的值可能没有player_id
方法;你可能想要实际玩家的ids。
可以使用@team.lnkteamplayer_ids
。
总而言之,你的行可能需要看起来像
<% @players = Player.find(:all, :conditions => ["id NOT IN (?)", @team.lnkteamplayer_ids]) %>
但没有更多信息,我们无法肯定地说。