2015-01-01 188 views
3

從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 
+0

我看到同樣的事情。它看起來像我之後(:構建)塊甚至沒有被解僱 - 就像它在到達這些回調之前驗證失敗一樣。你有什麼進展? – funwhilelost

+0

我注意到了一個問題:「用戶必須提供」實際上是從工廠還沒有完成的另一個模型中發射。假設你簡化了你的例子,你可能想檢查是否有任何關聯的模型也需要一個用戶... – funwhilelost

+1

我認爲'factory_girl'這部分是一個紅色的鯡魚 - 但至少它更容易集中精確到發生了什麼事。根本問題似乎與Rails 4.2本身有關。 –

回答

0

您需要定義一個用戶工廠。如果你這樣做了,請編輯你的答案以顯示它。

+0

暗示爲: '>> user = create(:user) (returns saved「user」object) –