Метод родительской модели не определен - PullRequest
2 голосов
/ 13 августа 2011

Я абсолютный новичок в Ruby on Rails; Я буквально начал прошлой ночью. Я следую учебнику Getting Started with Rails , хотя я внес несколько изменений. Вместо блога с постами и комментариями я создаю простое приложение для отслеживания задач, в котором с проектами связаны задачи.

Все шло довольно хорошо, пока шаг № 9 (удаление комментариев) . Согласно учебному пособию, я должен быть в состоянии получить родительскую модель для комментария, вызвав comment.post, аналог которого в моем случае - task.project. Но когда Rails пытается отобразить партиал, в котором у меня есть task.project, возникает NoMethodError:

undefined method `project' for #<Task:0x7fb0011cf058>

Мои модели следующие:

class Project < ActiveRecord::Base
  validates :name, :presence => true

  has_many :tasks, :dependent => :destroy
end

class Task < ActiveRecord::Base
  validates :name, :presence => :true

  belongs_to :project
end

Используя консоль rails, я определил, что в моих задачах есть метод project_id, который возвращает идентификатор связанного проекта. Таким образом, я могу обойти эту проблему, используя Project.find(task.project_id) вместо task.project в своей части. Это кажется «неправильным» и заставляет задуматься, не нарушены ли отношения между моими двумя моделями.

Что здесь происходит?

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

Обновление 2: Разобрался. Я использовал символ :true вместо простого логического значения в строке validates моей модели задач. Если бы я уделил больше внимания трассировке стека, я бы понял это гораздо раньше. Какая неловкая ошибка!

1 Ответ

0 голосов
/ 13 августа 2011

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

reload!
task = Task.find(<record-id>)
task.project

Это должно работать.

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