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

时间:2017-10-22 11:02:52

标签: ruby ruby-on-rails-4 rails-console

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

我试图通过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"

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

3 个答案:

答案 0 :(得分:1)

那是因为当你使用$(document).ready(function() { setTimeout(function() { $('a.etheme-popup').trigger('click'); },2000); }); 时,这会给你一个where,正如你所看到的,它们可以是单个或多个对象,具体取决于数据库中的内容,但你必须将它们迭代到给出每个属性的具体属性。

如果您使用ActiveRecord::Relation,它会为您提供特定记录,这就是您可以“直接”访问此对象属性的原因。

如果您想获得每个部门的名称属性,那么您可以使用Model.first,例如:

pluck

答案 1 :(得分:0)

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

ops.name正在为您提供模型名称(类名)。

你需要得到第一个

ops.first.name

答案 2 :(得分:0)

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

返回ActiveRecord::Relation个对象。不是Department对象(除非你声明一个cosntraint(第一个,最后一个等))。您已为name类定义了Department属性,该属性从数据库返回name字段。不适用于ActiveRecord :: Relation;而name在那里有不同的含义。它返回关系/类的名称。