Получение неопределенного метода для ActiveRecord :: Relation - PullRequest
21 голосов
/ 13 января 2012

У меня есть следующие модели

class Book < ActiveRecord::Base
  has_many :chapters
end

и

class Chapter < ActiveRecord::Base
    belongs_to :book
end

в /chapters/edit/id Я получаю

undefined method `book' for #<ActiveRecord::Relation:0x0000010378d5d0>

когда я пытаюсь получить доступ к книге, подобной этой

@chapter.book

Ответы [ 3 ]

56 голосов
/ 13 января 2012

Похоже, @chapter - это не единственный объект Chapter. Если @chapter инициализируется примерно так:

@chapter = Chapter.where(:id => params[:id])

тогда вы получите объект Relation (который можно рассматривать как коллекцию, но не как отдельный объект). Таким образом, чтобы исправить это, вам нужно извлечь запись, используя find_by_id, или взять первую из коллекции

@chapter = Chapter.where(:id => params[:id]).first

или

@chapter = Chapter.find_by_id(params[:id])
4 голосов
/ 17 февраля 2013

Как уже говорили другие - добавление метода .first решит эту проблему. У меня возникла эта проблема при вызове @chapter по его уникальному идентификатору. Добавление .first (или .take в Rails 4) обеспечит возврат только одного объекта.

3 голосов
/ 30 июля 2012

Попробуйте: Chapter.find(params[:id]).first

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