newbie: получить значение атрибута объекта дает ошибку неопределенного метода для # - PullRequest
2 голосов
/ 03 февраля 2012

Я пытаюсь выяснить, как получить атрибуты / свойства от объекта.

Модель

location.rb будет иметь атрибут: city

    @location = Location.where(:id => 1)

Кажется, что внутри моего контроллера можно найти информацию, но как мне получить доступ к: city из этого @location?

Я перепробовал все комбинации и подумал, что это должно быть:

  • @location.city
  • ставит @ location.city для вывода значения города

Но вместо этого я получаю

undefined method `city' for #<ActiveRecord::Relation:0x007ff2d1506330>

Кто-нибудь может уточнить, почему это не работает и что я здесь скучаю? Я искал примеры того, как это сделать, и пробовал все комбинации безрезультатно :( ТНХ

Ответы [ 3 ]

9 голосов
/ 03 февраля 2012

Запрос where Ареля возвращает коллекцию моделей, даже если результат только один.

Location.where(:id => 1) будет эффективно возвращать массив (фактически ActiveRecord::Relation) из Location объектов, даже если в этом массиве будет только один результат из этого конкретного запроса.

Чтобы обойти это, либо сделайте

@location = Location.where(:id => 1).first
# or...
@location = Location.find(1)  # Finds by ID
1 голос
/ 03 февраля 2012

На самом деле, where возвращает массив не экземпляр, а find. Поскольку city является атрибутом, в вашей модели есть метод экземпляра city, который вы не можете использовать для массива. Так что попробуйте @location = Location.find(1) тогда @location.city

1 голос
/ 03 февраля 2012

Чтобы извлечь объект из его идентификатора, используйте

@location = Location.find(1)  # 1 is the id your looking for

Прочтите руководство по Интерфейс запросов Active Record , чтобы узнать больше о find и where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...