【问题标题】:activerecord find all NOT included in an arrayactiverecord 查找所有未包含在数组中的内容
【发布时间】:2010-12-01 17:37:03
【问题描述】:

我有一组来自另一部分代码的团队名称,我想找到不在该数组中的所有团队。我已经尝试了以下方法,但它不起作用。

@team_exclude_list = ['Team 1', 'Team 2', 'Team 3']
@teams = Team.where("name != ?", @team_exclude_list)

这是在 Rails 3 中,谷歌并没有给我太多的爱。

【问题讨论】:

  • 提升这个答案是因为“谷歌...”这个短语的使用很好
  • 投赞成票,因为我需要同样的东西,也喜欢“谷歌”

标签: ruby-on-rails activerecord ruby-on-rails-3


【解决方案1】:

Rails 4 解决方案:

@team_exclude_list = ['Team 1', 'Team 2', 'Team 3']
@teams = Team.where.not(name: @team_exclude_list)

另外,为了加快查询速度,您可以:

  • 在名称上创建索引

  • 将查询更改为使用默认索引的 ID

【讨论】:

    【解决方案2】:

    我从来没有用字符串字段做过这个,但也许这会起作用:

    @teams = Team.where("name NOT IN (?)", @team_exclude_list)
    

    【讨论】:

    • 如果您的字符串列上没有索引,它可能会非常慢,但它会按您的预期工作。
    • 注意事项:如果数组为空,则查询如下:select * from teams where name NOT IN (NULL)
    • 要详细说明 M.ElSaka 注释,请始终使用 DUMMY 值填充数组,这样您就永远不会使用空数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2013-02-20
    • 2014-04-21
    • 2020-10-21
    • 2012-10-01
    • 1970-01-01
    相关资源
    最近更新 更多