在我的控制器中,我收到的所有条目都是这样的表格
@enums = Enuemerations.all
然后我想通过
搜索并获取名称@enums.find(107).name
我收到错误
undefined method `name' for #<Enumerator:0xb5eb9d98>
所以我在rails控制台中试了一下,发现这个工作
Enumeration.where(false).find(107)
这不起作用
Enumeration.all.find(107)
有人可以向我解释这是如何运作的吗?
由于
答案 0 :(得分:3)
使用Enumeration.all
立即查询数据库,返回带有所有Enumeration记录的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: "...">