【问题标题】:How to get active record's name after using find .where使用 find .where 后如何获取活动记录的名称
【发布时间】:2020-05-24 17:27:17
【问题描述】:

在这里直截了当:

                 <% @yyy = CityRace.where(city_race_id2: "3") %> 
                 <% @xxx =  @yyy.name %> 

@yyy 正在使用我传递给它的 ID 返回正确的记录,但我正在尝试获取对象名称。由于某种原因 .name 不起作用。知道我在这里出了什么问题吗?

如何找到 id = 某个 id 的记录名称?

【问题讨论】:

  • 如果 CityRace 有一个名称字段,并且具有该 ID 的项目有一个名称,那应该没问题。如果你只打印@yyy,你会看到什么?
  • @Balastrong 未定义方法 `name' 用于 #<:activerecord_relation:0x000000000a00e7e0>
  • 如果你只打印@yyy?不是@yyy.name
  • 欢迎来到 SO。请参阅“How to Ask”、“Stack Overflow question checklist”和“MCVE”及其所有链接页面。您要求我们帮助调试代码,但没有提供重复问题的代码。
  • “@yyy 正在返回正确的记录” – 不,它返回 ActiveRecord::Relation 的实例,它是所有记录(复数)的代理,带有 @987654329 @"3".

标签: ruby-on-rails ruby activerecord


【解决方案1】:

where 返回一个 ActiveRecord_Relationship,这意味着一个对象包含了数据库中每一行的 CityRace 对象,city_race_id2 等于 3,无论是否只有一个,结果都是一个 ActiveRecord_Relationship 对象,这不不回复name

如果您需要该结果中特定对象的名称,您可以通过其索引访问特定元素并在其上调用name,例如:

CityRace.where(city_race_id2: "3").first.name

或者从每个对象中检索名称:

CityRace.where(city_race_id2: "3").pluck(:name)

这个返回一个字符串数组,因此,您必须遍历它们以将它们全部打印出来或得到一个特定的。

另一方面,如果您需要查询中的单行,请使用find_by

CityRace.find_by(city_race_id2: "3").name

【讨论】:

    【解决方案2】:

    .where 返回一个 ActiveRecord::Relation,其行为类似于一个数组。您可以将其视为一种特殊的数组,允许您在其上链接更多活动的记录查询。当您调用 eachto_a 之类的某些方法时,它会将查询评估为 实际 数组。

    无论如何,您在这里寻找的是不是类似数组的东西。您希望@yyy 引用单个记录

    简单修复,只需使用find_by 而不是where。也看看https://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-findfind vs find_by vs where

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 2017-10-07
      • 2015-05-10
      相关资源
      最近更新 更多