RoR: переменная экземпляра интерпретируется как отсутствующий метод

Я следую учебнику, и в соответствии с кодом я должен быть в состоянии вызвать следующую ошибку без ошибок:

page = Page.find(1) # works
page.sections.size # Does not work

subject = Subject.find(1) # works
subject.pages.size # works

Раздел принадлежит странице, а страница принадлежит теме. Я пытаюсь подсчитать количество разделов, связанных с соответствующей страницей (в данном случае page :id => 1).

Ошибка Undefined Method, но я не обращаюсь к методу, я обращаюсь к переменной экземпляра. Я проверил свои модели и контроллер, и для subject.pages.size не определена область действия или деклерация, но все работает без нареканий. Я совершенно озадачен, почему он не работает для своего ребенка, page.sections, когда я пытаюсь выполнить ту же операцию.

Диагностическую информацию (из CLI с использованием pry) можно найти здесь: http://pastebin.com/xKKvSPkz

Схема БД: http://pastebin.com/hiAhXGt8


person DroBuddy    schedule 28.12.2013    source источник
comment
У вас есть has_many :sections в вашей модели page?   -  person vee    schedule 28.12.2013
comment
Эм, мальчик, я чувствую себя идиотом. Я забыл объявить об отношениях (в обе стороны) Дох! Спасибо, ви. Пожалуйста, отправьте свой ответ в качестве ответа, чтобы я мог отдать вам должное.   -  person DroBuddy    schedule 28.12.2013
comment
К вашему сведению, вы выполняете метод. Просто этот метод возвращает значение переменной экземпляра. Помните, что если вы не видите символ @, вы не смотрите на переменную экземпляра.   -  person Chuck    schedule 28.12.2013


Ответы (1)


Убедитесь, что связь между page и section определена:

class Page < ActiveRecord::Base
  has_many :sections
end

class Section < ActiveRecord::Base
  belongs_to :page
end

С этим отношением следующее должно работать так, как ожидалось:

page = Page.find(1)
page.sections.size
person vee    schedule 28.12.2013