2012-03-28 2 views
2

모델 Vin에 속한 Entree 모델을 가지고 있는데,이 모델 자체는 Producteur 모델에 속합니다.모델 생성시 하위 모델 초기화

Entree 생성/편집에 대한 양식에서 부모 Vin 및 Producteur에 대한 특성을 정의하거나 사용자 입력에 기초한 검색 (존재하는 경우 검색)을 허용 할 수 있습니다.

나는 앙트레 new에 다음과 edit 작업을 할 지금은

:

@entree = Entree.new 
@entree.vin = Vin.new  
@entree.vin.producteur = Producteur.new 

및 형태 fields_for 도우미를 사용하고, 그 작동합니다. 하지만 더 많은 모델과 더 많은 의존성을 가지려고합니다. 그래서 나는 그것을 지치게하고 싶습니다. 나는 producteur 초기화를 수행하는 after_initialize 콜백 빈에서 모델 정의 :

class Vin < ActiveRecord::Base 
    after_initialize :vin_setup 

    def vin_setup 
    producteur = Producteur.new 
    end 
end 

을 컨트롤러에서 producteur.new를 제거합니다.

정의되지 않은 방법은 NilClass에 대한`MODEL_NAME ': 클래스

<%= fields_for @entree.vin.producteur do |producteur| %> 

을 말한다 형태의 라인이 같아요 그게 의미하지만, 새로운 액션에 오류가 after_initialize 콜백은 예상대로 작동하지 않습니다. 내가 빠진 것이 있습니까? 또한 콜백을 정의하는 대신 Vin 모델에서 after_initialize 메서드를 정의하면 동일한 오류가 발생합니다.

답변

1

당신은 아마 당신이 producteur라는 이름의 지역 변수를 초기화하는,

def vin_setup 
    self.producteur = Producteur.new 
end 

당신이 그것을 가지고있는 방법이 필요합니다.

+0

덕분에, 그것을 않습니다. 나는 producteur가 정의 된 협회이기 때문에 그것을 생각할 수 있다고 생각했다. – Antoine

0

after_initialize 이벤트에 대해 콜백 메소드를 등록 할 수 없습니다. after_initialize이라는 메서드를 구현해야합니다.

이 시도 :

class Vin < ActiveRecord::Base 
    def after_initialize 
    self.producteur = Producteur.new if new_record? 
    end 
end