Rails .where和.find
我注意到Model.where
方法总是返回一个数组,即使只有一个结果,因为Model.find
方法没有。 这有什么理由吗? 我以为Model.where
是自Rails 3.X以来的首选函数。
当我期望单个结果和Model.where
时我应该使用Model.find
,当我期望多于一个结果?
-
where
返回一个ActiveRecord::Relation
(不是一个数组,尽pipe它的行为非常像一个),这是一个模型对象的集合 。 如果没有匹配的条件,它只是返回一个空的关系。 -
find
(及其相关的dynamicfind_by_columnname
方法)返回单个模型对象。 如果没有find,则会引发ActiveRecord::RecordNotFound
exception(但不会使用dynamicfind_by_
方法)。虽然
find
可以返回一个数组的logging,而不是一个关系,如果给定一个ID列表,使用where
是首选,因为Rails 3.许多类似的使用find
现在已被弃用或完全消失 。
所以是的,如果你只想要和期望一个单一的对象,使用find
更容易,否则你必须调用Model.where.first
。
请注意,从Rails 4.0开始不推荐使用旧式哈希选项和许多dynamicfind_
方法( 请参阅相关发行说明 )。
实际上, find_by
从获得的ActiveRecord::Relation
获取模型对象
def find_by(*args) where(*args).take end
资源
Model.find
使用主键列。 因此总是有一个或没有结果。 当你正在寻找一个由它的id标识的特定元素时使用它。