Почему я получил объект ActiveRecord :: Relation? - PullRequest
5 голосов
/ 01 апреля 2011

Я пытаюсь получить экземпляр автомобиля из базы данных,

theCar = Car.where(:name => 'TOYOTA')
puts theCar.user_name

Я получил сообщение об ошибке: неопределенный метод `user_name 'для ActiveRecord :: Relation: 0xb6837b54

Почему я получил ActiveRecord :: Relation объект, а не Car объект ??Что может быть причиной?Кстати, я запрашиваю машину в моем миграционном файле.Я использую Rails 3.

1 Ответ

13 голосов
/ 01 апреля 2011

Вы получаете это, потому что вы используете Ленивая Загрузка. Ничего не загружается, прежде чем вы вызовете определенный объект или объекты.

По сути, ваш запрос вернет массив объектов: ВСЕ автомобили с именем TOYOTA. Если вы знаете, что есть только один АВТОМОБИЛЬ с таким именем, вы можете сделать это:

theCar = Car.where(:name => 'TOYOTA').first
# or
theCar = Car.first(:name => 'TOYOTA')
# or
theCar = Car.find_by_name('TOYOTA')

А если есть много автомобилей с именем TOYOTA:

theCars = Car.where( :name => "TOYOTA" ).all
theCars.map(&:user_name)
#=> ["Jhon", "Paul" ...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...