Я абсолютный новичок в 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
моей модели задач. Если бы я уделил больше внимания трассировке стека, я бы понял это гораздо раньше. Какая неловкая ошибка!