2010-10-13 54 views
0

我正在運行rails 3.0,rspec 2.0和factory_girl。這是簡化的場景我的工作:與factory_girl,rpsec 2.0和rails 3.0問題=>無法使has_one關係很好地結合在一起!

:用戶可以在同一時間

# user.rb 
class User < ActiveRecord::Base 
    has_one :plan 
    attr_accessible :login, :plan_id 

end 

# plan.rb 
class Profile < ActiveRecord::Base 
attr_accessible :plan 
end 

# user_factory.rb 
Factory.define :user do |u| 
    u.login "test" 
    u.association :plan 
end 

#plan_factory.rb 
Factory.define :plan do |p| 
    p.name "plan1" 
end 

當我運行rspec的規格/型號/ user_spec.rb我得到這個錯誤訂閱只有一個計劃故障/錯誤:用戶=廠(:用戶) 的SQLite3 :: ConstraintException:users.plan_id不能爲null

#spec/models/user_spec.rb 
require File.dirname(__FILE__) + '/../spec_helper' 

describe User do 
    it "should be valid" do 
    user = Factory(:user) 
    #User.new.should be_valid 
    user.should be_valid 
    end 
end 

什麼,我做錯了什麼?我堅持這個非常簡單的方案,這是非常令人沮喪的。在那個時候,BDD讓我變得像地獄一樣!

+0

你建立了你的測試數據庫嗎? 'rake db:test:prepare' – Trip 2010-10-14 00:19:36

回答

0

用戶訂閱一個計劃。所以用戶有一個計劃,並且計劃與許多用戶有關。所以我認爲我說得對。該錯誤發生在用戶工廠。 更換

u.association :plan 

通過

u.association :plan, :factory => :plan 

固定的問題。

問題解決!

0

看起來您錯誤地實施了has_one關聯。 has_one -- belongs_to關係中的外鍵應該在與belongs_to指令相對應的模型表中。檢查db/schema.rb - 我想你會發現在users表中定義了plan_id。如果您希望User型號具有一個Plan,則需要從users中刪除plan_id,並將user_id添加到plans

如果你寧願讓它這麼Plan有一個User,保持模式的原樣,並把has_one :userPlanbelongs_to :planUser

相關問題