2014-02-07 13 views
0

Rails數據庫表通常有時間戳記(created_atupdated_at),並且從第4列開始,所有時間戳列都有NOT NULL約束條件。因此,所有工廠必須爲所述時間戳指定值。我怎樣才能指定一個屬於所有工廠的屬性,而不必重複自己?如何指定所有工廠通用的屬性?

issue 564中討論了類似的東西。

我可以用instance_eval這樣的:

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 

,但它不是很清晰。

我使用:

gem 'factory_girl_rails', '~> 4.2.1' 

回答

1

你確定你需要指定的時間戳?儘管它們的約束條件是NOT NULL,但它們的缺席並不影響驗證,因爲Rails在插入或更新時應用了這些約束。我沒有在我的任何Rails 4應用程序中指定它們,並且這些工廠都通過了有效性測試。

是您對其他常見屬性的問題,或者您是否特別關注時間戳?如果是後者,我認爲你可以跳過所有這些工作。

+0

謝謝。是的,我只關心時間戳,看起來我在工廠裏並不需要它們。我有一個失敗的測試告訴我,'created_at'列的'not null'約束被違反了,我認爲這是工廠的錯,但那是一條紅鯡魚。 –

相關問題