【问题标题】:Obtaining model's name through rails console gives different results通过 rails 控制台获取模型的名称会产生不同的结果
【发布时间】:2018-04-03 01:17:48
【问题描述】:

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

我正在尝试通过 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"

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

【问题讨论】:

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


    【解决方案1】:

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

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

    你需要得到第一个

    ops.first.name
    

    【讨论】:

    • 我很高兴先生 :)
    【解决方案2】:

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

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

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

    Department.where(condition).pluck(attributes)
    

    【讨论】:

    • 谢谢塞巴斯蒂安,这很有帮助
    【解决方案3】:
    ops = Department.where(name: "Operations")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 2012-06-10
      相关资源
      最近更新 更多