通过 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的名字。
我只是想知道是否有人可以提供帮助。
我试图通过 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的名字。