2

在我的控制器中,我将所有条目从这样的表中获取

@enums = Enuemerations.all

然后我想通过做搜索并从中获取名称

@enums.find(107).name

我收到一个错误

undefined method `name' for #<Enumerator:0xb5eb9d98>

所以我在 rails 控制台试了一下,发现这个工作

Enumeration.where(false).find(107)

这不起作用

Enumeration.all.find(107)

有人可以向我解释这是如何工作的吗?

谢谢

4

1 回答 1

4

使用Enumeration.all即时查询返回Array所有枚举记录的数据库(如果您只想要一条记录,这将非常低效)。它不再知道 ActiveRecord 方法:

 > Enumeration.all.class
  Enumeration Load (0.1ms)  SELECT "enumerations".* FROM "enumerations" 
 => Array 

调用需要不同语法findArray用途,例如: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: "..."> 
于 2012-07-23T10:58:42.710 回答