通过 rails 控制台获取模型的名称会给出不同的结果

Obtaining model's name through rails console gives different results

我只是想知道是否有人可以提供帮助。

我试图通过 rails 控制台获取模型的名称,但它给了我不同的结果。

我先做:

Department.first.name

结果是:

Department Load (0.3ms)  SELECT  "departments".* FROM "departments"  ORDER BY "departments"."id" ASC LIMIT 1
=> "Operations"

然后我做:

ops = Department.where(name: "Operations")

结果是:

=> ActiveRecord::Relation #[Department id: 1, name: "Operations", created_at: "2017-10-22 00:40:51", updated_at: "2017-10-22 00:40:51"]>

但是如果我想得到:

ops.name

结果是:

=> "Department"

这让我感到困惑并导致联想问题。请帮忙!

即使 ops 只有一个结果不是一个 Department 而是一个 ActiveRecord::Relation,所以

ops.name 为您提供型号名称(class 名称)。

你需要得到第一个

ops.first.name

那是因为当你使用 where 时,这会给你一个 ActiveRecord::Relation,正如你所看到的,它们可以是单个或多个对象,具体取决于你的数据库中的内容,但你必须迭代他们赋予每个人特定的属性。

在您使用 Model.first 的情况下,它会为您提供特定的记录,这就是为什么您可以 "directly" 访问此对象的属性的原因。

如果你想要获取每个部门的名称属性,那么你可以使用pluck,例如:

Department.where(condition).pluck(attributes)
ops = Department.where(name: "Operations")

returns ActiveRecord::Relation 对象。不是 Department 对象(除非你声明一个约束(第一个,最后一个等))。您已经为 Department class 定义了 name 属性,其中 returns 来自数据库的 name 字段。不适用于 ActiveRecord::Relation; name 在那里有不同的含义。它是returnsrelation/class的名字。