【问题标题】:find all :conditions id found in an array of values查找所有:在值数组中找到的条件 id
【发布时间】:2011-06-14 13:19:33
【问题描述】:

我有 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 ]) %>

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

感谢您提供的任何建议。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你有几个问题:

    1) 条件的第一部分,“id != ?”,是 sql 的一个片段,在 sql 中你“不等于”&lt;&gt; 而不是!=。比如"id &lt;&gt; ?"

    2) 要使用数组,sql 语法为id in (1,2,3)id not in (1,2,3)。在您的条件下,您可以像 :conditions =&gt; ["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])
    

    【讨论】:

      【解决方案2】:

      由于您没有提供错误消息,我在这里猜测。但是,我不认为!= 在许多 SQL 方言中是有效的语法。您可能正在寻找类似 @​​987654322@ 的东西。

      另外,@team.lnkteamplayers.player_id 可能不起作用,因为从 @team.lnkteamplayers 返回的值可能没有 player_id 方法;您可能需要实际玩家的 ID。

      这可以使用 @team.lnkteamplayer_ids 之类的东西来完成。

      总而言之,你的线可能需要看起来像

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

      但如果没有更多信息,我们无法确定。

      【讨论】:

      • 非常感谢您的建议,但我在“lnkteamplayers”表中有 2 个字段代表玩家 ID 和团队 ID。如果我做类似的事情:
      • @Jakob S - 这会将玩家 id 与 lnkteamplayer id 进行匹配,因此不起作用...
      • @players = Player.find(:all, :conditions => ["id NOT IN (?)", @team.lnkteamplayers[0].player_id])
      • @tanya - 这将获得除团队的第一个成员之外的所有玩家。这也不是你想要的。此外,@team.lnkteamplayers[0].player_id 提供了一个 id,您需要传递一个数组。看我的回答...
      • 上面的代码行返回了一个不包含@team 中第一个玩家的玩家列表。事实上,我想要一个不包含@team 中所有玩家的玩家列表
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2019-12-03
      • 2023-03-04
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多