2012-06-28 24 views
0

這個問題可能已被問了很多次。這是我們的版本。我們的rails 3.1應用程序中有user和user_level模型。用戶has_many user_levels。如何在FactoryGirl 3.3中使用回調以在has_many關聯中創建子對象?

class User < ActiveRecord::Base 
    has_many :user_levels 
    accepts_nested_attributes_for :user_levels, :allow_destroy => true 
    validates_presence_of :user_levels 
end 

class UserLevel < ActiveRecord::Base 
    belongs_to :user 
    validates :position, :presence => true 
end 

以下是我們在FactoryGirl 3.3:

FactoryGirl.define do 

    factory :user_level do 
    position    "admin" 
    user 
    end 

    factory :user do  
    name     "Test User" 
    login     'testuser' 
    password    "password1" 

    factory :user_with_levels do 
     #user_levels 
     after(:create) do |user| 
     FactoryGirl(:user_level, :user => user) 
     end 
    end 
    end 
end 

u = FactoryGirl.build(:user_with_levels) or u = FactoryGirl.create(:user_with_levels)在我們的RSpec被使用。後創建回調不起作用,並有錯誤說Validation failed: User levels can't be blank。上面的回調有什麼問題?非常感謝。

回答

1

我認爲這是因爲在您的嵌套模型上進行驗證時,只要create嘗試save a user工廠。您是否嘗試過使用after(:build)回撥?

+0

朝着正確的方向邁出的一步。解決方案發布如下謝謝。 – user938363

4

這是一個可行的解決方案。它是基於由蒂姆·賴利以下職位:http://icelab.com.au/articles/factorygirl-and-has-many-associations/

FactoryGirl.define do 

    factory :user_level do 
    position    "admin" 
    user 
    end 

    factory :user do  
    name     "Test User" 
    login     'testuser' 
    password    "password1" 

    #user_levels 
    after(:build) do |user| 
     user.user_levels << FactoryGirl.build(:user_level, :user => user) 
    end 
    end 
end 

的問題(用戶級不能爲空)是因爲當用戶保存任何用戶級別。用戶級別需要與用戶一起構建。

相關問題