2016-10-24 6 views
4

나는 내 머리를 두들겨 봤습니다. 나는 특성의 위에 특성을 덮어 쓸 수 있기를 원한다. 나는 documentation과 몇 가지 인터넷 예제를 읽고 있었지만 제대로 작동하지는 못합니다. 당신이 상속하지 않습니다 이는 basic_instant_instance이 -공장 소녀 패스 매개 변수로 특성

당신은 여기에 조금 전략을 재고 할 필요가

ArgumentError: Trait not registered: start

답변

7

:

test "..." do 
#overwrite start_time 
middle = create(:basic_instant_instance, start: 1.hours.ago) 
end 

FactoryGirl.define do 

    factory :instant_instance do 

    trait :active_now do 
    #attributes... 
    transient do 
     start nil 
    end 
    #overwrite start_time 
    start_time start.present? ? start : Time.now 
    end 

    factory :basic_instant_instance,   traits: [:active_now] 
end 

을 내가 점점 계속 :

내가 뭘 원하는지의 일종이다 instant_instance에서이므로 특성 [: active_now] 또는 시작 특성에 대해 아무것도 모릅니다.

Factory 인스턴스를 작성할 때 중괄호 안에 배치하여 start_time을 평가해야합니다. 그렇지 않으면 시작이 초기화되기 전에 평가됩니다. 그래서 다음과 같이 호출 다음

FactoryGirl.define do 

    factory :instant_instance do 
    trait :active_now do 
     #attributes... 

     transient do 
     start nil 
     end 

     #overwrite start_time 
     start_time { start.present? ? start : Time.now } 
    end 
    end 
end 

과 : 다음과 같은

시도 뭔가

create(:instant_instance, start: 1.hours.ago, :active_now) 
+0

가 나는 특성까지 임시 데이터를 전달할 수없는 잘못이었다 보인다 - 개정 한 내 따라서 적절하게 평가하려면 중괄호가 필요하다는 것을 깨달았습니다 – David

+0

또한 다음과 같이 작동합니다. create (: basic_instant_instance, start : 1.hours.ago). 그건 그렇고, 나는 이해하지 못한다 : "basic_instant_instance ...는 instant_instance로부터 상속받지 않으므로 특성 [: active_now] 또는 속성을 시작하는 것에 대해 아무것도 모릅니다." – Gaston

+0

[상속] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#inheritance)을 방문하면 댓글에서 설명하는 것이 더 효과적입니다. 필요한 경우 내 대답에 추가 정보를 추가 할 수 있습니다. – David