使用find .where后如何获取活动记录的名称

时间:2020-05-24 17:27:17

标签: ruby-on-rails ruby activerecord

直接在此处:

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

@yyy使用我传递给它的ID返回正确的记录,但是我正在尝试获取对象名称。由于某种原因,.name无法正常工作。知道我这里要怎么做吗?

如何找到ID =特定ID的记录名称?

2 个答案:

答案 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,其行为类似于数组。您可以将其视为一种特殊的数组,使您可以在其上进行更多活动记录查询。当您调用诸如eachto_a之类的某些方法时,它会将查询评估为 actual 数组。

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

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

相关问题