ActiveRecord where field =?可能值的数组

时间:2015-03-10 01:01:02

标签: ruby-on-rails rails-activerecord

我想做

Model.where('id = ?', [array of values])

如何在不将OR语句链接在一起的情况下完成此查找?

6 个答案:

答案 0 :(得分:112)

here开始,它似乎是使用SQL in语句完成的:

Model.where('id IN (?)', [array of values])

或者更简单地说,就像kdeisz指出的那样(使用Arel来创建SQL查询):

Model.where(id: [array of values])

答案 1 :(得分:16)

来自ActiveRecord Query Interface guide

  

如果要使用IN表达式查找记录,可以将数组传递给条件哈希:

Client.where(orders_count: [1,3,5])

答案 2 :(得分:6)

为了便于阅读,可以进一步简化:

Model.find_by(id: [array of values])

这相当于使用where,但更明确:

Model.where(id: [array of values])

答案 3 :(得分:2)

您可以使用“ in”运算符:

Model.in(id: [array of values])

答案 4 :(得分:0)

如果您要查找蒙古语中的查询,那就是Model.where(:field.in => ["value1", "value2"] ).all.to_a

答案 5 :(得分:0)

其中 find_by 之间的差异很小。

find_by 将仅返回一条记录(如果找到),否则为零。

  

查找符合指定条件的第一条记录。没有隐含的订购,因此,如果订购很重要,则应自己指定。   如果未找到任何记录,则返回nil。

  def find_by(*args)
      where(*args).take
    rescue RangeError
      nil
  end

同时位置将返回关系

  

返回一个新的关系,这是过滤当前关系的结果     根据参数中的条件。

因此,根据您的情况,适当的代码是:

Model.where(id: [array of values])