使用Enumeration.all
即时查询返回Array
所有枚举记录的数据库(如果您只想要一条记录,这将非常低效)。它不再知道 ActiveRecord 方法:
> Enumeration.all.class
Enumeration Load (0.1ms) SELECT "enumerations".* FROM "enumerations"
=> Array
调用需要不同语法find
的Array
用途,例如:Enumerable#find
enums = Enumeration.all
enum = enums.find { |e| e.id == 2 }
=> #<Enumeration id: 2, name: "...">
使用Enumeration.where(false)
只返回一个惰性ActiveRecord::Relation
,它实际上并没有命中数据库(还),这允许您链接额外的 ActiveRecord 方法,find
例如上面的示例。
> Enumeration.where(false).class
=> ActiveRecord::Relation
> Enumeration.where(false).find(2)
Enumeration Load (0.2ms) SELECT "enumerations".* FROM "enumerations" WHERE "enumerations"."id" = ? LIMIT 1 [["id", 2]]
=> #<Enumeration id: 2, name: "...">