2014-02-07 1 views
0

레일 데이터베이스 테이블에는 일반적으로 타임 스탬프 (created_atupdated_at)가 있으며, 레일 4의 모든 타임 스탬프 열은 NOT NULL 개의 제약 조건을 갖습니다. 따라서 모든 공장에서는 상기 타임 스탬프에 대한 값을 지정해야합니다. 자신을 반복하지 않고 모든 공장에 공통된 속성을 어떻게 지정할 수 있습니까?모든 팩토리에 공통된 속성을 지정하는 방법은 무엇입니까?

유사한 내용이 issue 564에서 논의되었습니다.

module SharedFactoryBits 
    def self.timestamps 
    Proc.new { 
     created_at { Time.zone.now } 
     updated_at { Time.zone.now } 
    } 
    end 
end 

# spec/factories/banana_factory.rb 
FactoryGirl.define do 
    factory :banana do 
    instance_eval &SharedFactoryBits.timestamps 
    end 
end 

# spec/factories/kiwi_factory.rb 
FactoryGirl.define do 
    factory :kiwi do 
    instance_eval &SharedFactoryBits.timestamps 
    end 
end 

을하지만 아주 읽기 쉬운 아니다 :

이 같은 instance_eval을 사용할 수 있습니다.

내가 사용하고 있습니다 : 당신은 타임 스탬프를 지정해야합니다 확인

gem 'factory_girl_rails', '~> 4.2.1' 

답변

1

있습니까? NOT NULL 제약 조건을 가진 필드 임에도 불구하고 Rails는 삽입 또는 업데이트시 적용되므로 유효성 검사에 영향을 미치지 않습니다. 필자가 레일즈 4 앱 중 어느 것에도 지정하지 않았고 해당 공장이 모두 유효성 검사를 통과했습니다.

다른 일반적인 속성에 대한 질문입니까, 특히 타임 스탬프와 관련이 있습니까? 후자라면이 모든 작업을 건너 뛸 수 있다고 생각합니다.

+0

감사합니다. 예, 타임 스탬프에만 관심이 있었고 제 공장에서 필요하지 않은 것 같습니다. 나는'created_at' 칼럼의'not null' 제약이 위반되었다는 것을 알려주는 실패한 테스트를 가지고 있었고, 나는 그것이 공장의 잘못이라고 생각했지만 빨간 청어였습니다. –

관련 문제