從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本身有關。 –