ActiveRecord在哪里= 可能值的数组


Answers:


157

这里看来,它是使用SQLin语句完成的:

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

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

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

6
可以简化为Model.where(id: [array of values])
kddeisz 2015年

Model.where(“ id in(?)”,[1..8])似乎对我不起作用。有任何想法吗?
BKSpurgeon '16

您不需要方括号,1..8它已经像数组一样。
Will Richardson

1
这种语法会自动在[值数组]中转义单引号吗?
WiredIn

1
当我的数组足够大时,该方法将花费大量时间。你怎么能用很大的阵列做到这一点?
jgomo3


6

为了提高可读性,可以将其进一步简化为:

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

这等效于使用where,但更加明确:

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

find_by实际上是where().takeModel.find_by(id: [1, 2, 3])只会回来Model(id: 1)
James.Oliver '19

如果仅查找单个记录而不是满足条件的数组,则是另一种选择,find_by_id([1, 2, 3])
Steve


0

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


0

wherefind_by之间有一个“很小的”区别。

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

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

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

同时在那里它将返回一个关系

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

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

Model.where(id: [array of values])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.