find all:条件id在值数组中找到

时间:2011-06-14 13:19:34

标签: ruby-on-rails

我有两个模型(playerteam通过模型lnkteamplayer链接)

Team has_many players through lnkteamplayer
Player has_many teams through lnkteamplayer

我需要检索所有不属于特定团队的玩家。

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

我收到上述代码行的错误。我的问题是如何在上述条件下传递一组值。

感谢您提供的任何建议。

2 个答案:

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

但没有更多信息,我们无法肯定地说。