我想要做
Model.where('id = ?', [array of values])
如何在不使用连续 OR 语句的情况下完成这个查找?
我想要做
Model.where('id = ?', [array of values])
如何在不使用连续 OR 语句的情况下完成这个查找?
看起来可以使用 SQL 中的 in
语句来完成,这里有更多信息。
Model.where('id IN (?)', [array of values])
或者更简单地说,正如kdeisz指出的(使用Arel创建SQL查询):
Model.where(id: [array of values])
为了易读性,这可以更简单地表述为:
Model.find_by(id: [array of values])
where
,但更加明确:Model.where(id: [array of values])
find_by
actually is where().take
. Model.find_by(id: [1, 2, 3])
will only return Model(id: 1)
- James.Oliverfind_by_id([1, 2, 3])
。 - SteveModel.in(id: [array of values])
where和find_by之间有一个“小”区别。
find_by如果找到记录,将返回一个记录,否则将返回nil。
查找符合指定条件的第一条记录。没有暗示排序,所以如果顺序很重要,应该自己指定。 如果没有找到记录,则返回nil。
def find_by(*args)
where(*args).take
rescue RangeError
nil
end
同时,where 会返回一个关系
返回一个新的关系,该关系是根据参数中的条件过滤当前关系的结果。
因此,在您的情况下,适当的代码是:
Model.where(id: [array of values])
Model.where(:field.in => ["value1", "value2"] ).all.to_a
Model.where(id: [值的数组])
。 - kddeisz1..8
已经类似于数组。 - Will Richardson