2010-11-16 2 views
1

У меня есть две модели приложений и контактов. Приложение имеет отношения has_one с контактом. Я объявил предложение accepts_nested_attributes_for в модели приложения для контакта. Теперь, в apps_controller, если я использую метод сборки для объекта приложения, я получаю сообщение об ошибке для класса nil, хотя я и заявил об этом.Ошибка вложенных моделей в рельсах 3

App.rb

class App < ActiveRecord::Base 
    has_one :contact_person, :dependent => :destroy 
    accepts_nested_attributes_for :contact_person 
end 

ContactPerson.rb

class ContactPerson < ActiveRecord::Base 
    belongs_to :app 
end 

apps_controller.rb

def new 
    @app = App.new 
    @app.contact_person.build 
end 

Могли пожалуйста, укажите мне, делаю ли я что-то неправильно. Я использовал вложенные модели до этого, но не столкнулся с этой ошибкой.

ответ

0

Декларирование ассоциации автоматически не создает его:

class App < ActiveRecord::Base 
    has_one :contact_person, :dependent => :destroy 
    accepts_nested_attributes_for :contact_person 
    # Adding this line should work 
    after_create { self.contact_person = ContactPerson.new } 
end 
+0

эй спасибо за ответ. Я добавил ваше предложение, но все же оно не работает. Я все еще получаю undefined метод 'build 'для nil: NilClass при попытке просмотра приложений/новой страницы. – felix

+0

@Felix, если вы используете наблюдателя 'after_create', Дмитрий предложил удалить строку' @ app.contact_person.build' с контроллера. –

+0

@Felix, показывая больше информации, поможет; включая стек представлений и вызовов. –

3

Я должен использовать @app.build_contact_person вместо @app.contact_person.build. Таким образом, это сработало :)

+1

Хм очень странно для меня .. @ app.contact_person.build должен сработать !! Я использовал его таким же образом, и это сработало для меня! – Hemanth

Смежные вопросы