直接在此处:
<% @yyy = CityRace.where(city_race_id2: "3") %>
<% @xxx = @yyy.name %>
@yyy使用我传递给它的ID返回正确的记录,但是我正在尝试获取对象名称。由于某种原因,.name无法正常工作。知道我这里要怎么做吗?
如何找到ID =特定ID的记录名称?
答案 0 :(得分:3)
where
返回ActiveRecord_Relationship,这意味着包含city_race_id2
的数据库中每一行都包含CityRace对象的对象等于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
答案 1 :(得分:2)
.where
返回一个ActiveRecord::Relation
,其行为类似于数组。您可以将其视为一种特殊的数组,使您可以在其上进行更多活动记录查询。当您调用诸如each
或to_a
之类的某些方法时,它会将查询评估为 actual 数组。
无论如何,您在这里寻找的不是 类似于数组的东西。您希望@yyy
引用单个记录。
简单修复,只需使用find_by
而不是where
。还要看看https://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find和find vs find_by vs where