2014-02-07 4 views
0

Таблицы базы данных Rails обычно имеют временные метки (created_at и updated_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

Спасибо. Да, меня беспокоили только временные метки, и похоже, что я не нуждаюсь в них на своих заводах. У меня был неудачный тест, в котором говорилось, что ограничение «не null» столбца «created_at» было нарушено, и я подумал, что это вина фабрики, но это была красная селедка. –

Смежные вопросы