Ada*_*amB 74 ruby-on-rails ruby-on-rails-3
我注意到该Model.where方法总是返回一个数组,即使只有一个结果,因为Model.find方法没有.这有什么理由吗?我认为Model.where自从Rails 3.X以来它是首选功能.
Model.find当我期待单个结果并且Model.where我期望多个结果时,我应该使用吗?
And*_*all 117
where返回一个ActiveRecord::Relation(不是一个数组,即使它的行为很像一个),它是一个模型对象的集合.如果没有任何条件匹配,它只返回一个空关系.
find(及其相关的动态find_by_columnname方法)返回单个模型对象.如果未找到任何内容,ActiveRecord::RecordNotFound则会引发异常(但不会使用动态find_by_方法).
虽然find可以返回一个记录数组 - 而不是一个关系 - 如果给出了一个ID列表,where因为Rails 3是首选.许多类似的用法find现在已被弃用或完全消失.
所以,是的,如果您只想要并期望单个对象,则使用起来find更容易,否则您必须调用Model.where.first.
请注意,从Rails 4.0开始,不推荐使用旧式哈希选项find和许多动态find_方法(请参阅相关的发行说明).
Kam*_*nek 13
实际上find_by从where获得的模型对象ActiveRecord::Relation
def find_by(*args)
where(*args).take
end
Run Code Online (Sandbox Code Playgroud)
Model.find正在使用主键列.因此总会有一个或没有结果.当您查找由其ID标识的特定元素时,请使用它.
| 归档时间: |
|
| 查看次数: |
64574 次 |
| 最近记录: |