FactoryGirl attributes_for与关联

时间:2014-03-04 11:31:03

标签: ruby-on-rails rspec factory-bot

有以下工厂:

factory :car do
    name 'Some car'
    engine_value 1.6
    color '#ff0000'
    car_type
    engine_type
    transmission
    drive_type
    material
end

如您所见,有很多相关对象。但是代码

attributes_for(:car)

仅生成:name=>"Some car", :engine_value=>1.6, :color=>"#ff0000"}哈希。我需要获得具有所有属性的哈希。我该怎么做?谢谢。

2 个答案:

答案 0 :(得分:12)

我遇到了同样的问题而且我使用了像

这样的东西
build(:car).attributes

不确定这是否是最好的方法,但它对我有用

希望这有帮助

答案 1 :(得分:0)

您可能希望省略idcreated_atupdated_at属性。

FactoryGirl.build(:car).attributes.except('id', 'created_at', 'updated_at')

如果您需要键作为符号(如attributes_for生成的键中所示):

FactoryGirl.build(:car).attributes.except('id', 'created_at', 'updated_at').symbolize_keys

限制:

  • 它不会为HMT和HABTM关联生成属性(因为这些关联存储在连接表中,而不是实际属性中)。
  • 工厂中的关联策略必须为create,与association :user, strategy: :create中一样。如果您不明智地使用它,这种策略可能会使您的工厂变得非常慢。