저장 될 때 상위 사용자의 일부 특성을 업데이트하는 이벤트 모델이 있습니다.FactoryGirl에서 공장을 만들기 전에 부모를 생성하도록하려면 어떻게해야합니까?
class User
has_many :events
end
class Event
belongs_to :user
before_save :update_user_attributes
validates :user, presence: true
def update_user_attributes
self.user.update_attributes(hash_of_params)
end
end
이것은 대부분 잘 작동합니다. 사용자가 존재해야하며 이벤트와 상호 작용하기 전에 로그인해야합니다.
하지만 내 테스트 제품군은 특히 이벤트 팩토리에 문제를 일으키고 있습니다.
FactoryGirl.define do
factory :event do
user
end
end
이 실패 update_user_attributes
원인으로 인해 FactoryGirl이 이벤트를 빌드 순서로, 사용자가 이벤트가 생성 될 때 사용할 수없는 것으로 보인다.
이 오류없이
create(:event)
# ActiveRecord::RecordNotSaved:
# Failed to save the record
하지만
build(:event).save
패스가
내가 오류를 방지 할 수있는 방법의 숫자가 제기되고있다, 예를 들어,에서 user.persisted?
확인을 의미합니다 update_user_attributes
메서드를 사용하거나 callaback after_save
을 실행하십시오. 하지만 제 질문은 특히 FactoryGirl과 관련이 있습니다.
주어진 사실을 감안할 때 이벤트를 만들기 전에 연결된 사용자를 강제로 생성 할 수있는 방법이 있습니까?
감사 @martin FG 콜백에 대한 article on thoughtbot가있다. 하지만 부모를 생성 한 다음 이벤트 팩토리에서 부모의 ID를 작성하는 방법을 알아낼 수는 없습니다. '(create) do self.user_id = create (: user) .id end'와 같이 될 필요가 있습니다. 하지만 올바른 구문을 파악할 수없는 것 같습니다. –
@AndyHarvey,'before (: create) do | event | event.user = create (: user) end'라고 가정합니다. – Ilya