У меня есть модель Entree, которая принадлежит модели Vin, которая сама принадлежит модели Producteur.
В форме для создания / издания Entree я хочу разрешить пользователю определять атрибуты родительских Vin и Producteur для их создания или извлекать их, если они существуют (извлечение на основе ввода пользователя).
На данный момент я выполняю следующие действия в действиях Entree new
и edit
:
@entree = Entree.new
@entree.vin = Vin.new
@entree.vin.producteur = Producteur.new
и используйте fields_for
помощник в форме, и это работает. Но я намерен иметь гораздо больше зависимостей с большим количеством моделей, поэтому я хочу, чтобы они оставались сухими. Я определил after_initialize
обратный вызов в модели Vin, который выполняет инициализацию продукта:
class Vin < ActiveRecord::Base
after_initialize :vin_setup
def vin_setup
producteur = Producteur.new
end
end
и удалите producteur.new
из контроллера. Однако при новом действии выдается ошибка:
неопределенный метод `model_name 'для NilClass: Class
для строки в форме, которая говорит
<%= fields_for @entree.vin.producteur do |producteur| %>
Полагаю, это означает, что обратный вызов after_initialize не действует так, как я ожидаю. Я что-то упускаю? Кроме того, я получаю ту же ошибку, если я определяю метод after_initialize
в модели Vin вместо определения обратного вызова.