从FactoryGirl 2.5.2升级到4.5.0后,对belongs_to
关联的验证失败。FactoryGirl belongs_to关联和validates_presence_of失败 - 外键关联,对象不是
两个模型文件:
class User < ActiveRecord::Base
...
has_many :things
...
end
class Thing < ActiveRecord::Base
...
belongs_to :user
validates_presence_of :user
...
end
工厂:
FactoryGirl.define
factory :thing do
association :user
...
end
end
创建新thing
总是失败说User must be provided
。当我进入代码时,问题是外键正确设置,但关联的对象似乎是零。
>> user = create(:user)
(returns saved "user" object)
>> user.id
1
>> thing = build(:thing, user: user)
(returns new "thing" object)
>> thing.valid?
false
>> thing.user_id
1
>> User.find(1).present?
true
>> thing.user
nil
我试过各种各样的组合和变化。我试过使用after(:build)
块来设置用户并使用不同的FactoryGirl语法。我试过的只是简单的user
而不是关联。但它总是归结为这个问题 - 有一个关联的键,它是正确的,但不是关联的对象(即使该对象存在并被保存)。
环境:
ruby 2.1.5
factory_girl 4.5.0
factory_girl_rails 4.5.0
rails 4.2.0
rspec 3.1.0
我看到同样的事情。它看起来像我之后(:构建)块甚至没有被解雇 - 就像它在到达这些回调之前验证失败一样。你有什么进展? – funwhilelost
我注意到了一个问题:“用户必须提供”实际上是从工厂还没有完成的另一个模型中发射。假设你简化了你的例子,你可能想检查是否有任何关联的模型也需要一个用户... – funwhilelost
我认为'factory_girl'这部分是一个红色的鲱鱼 - 但至少它更容易集中精确到发生了什么事。根本问题似乎与Rails 4.2本身有关。 –