2012-04-16 5 views
1

私は2つの工場があります - ユーザと会社。CanCan + Factory_Girl - 奇妙な動作

FactoryGirl.define do 
    factory :user do 
    sequence(:email) { |n| "user#{n}@exyzample.com" } 
    password "secret" 
    password_confirmation "secret" 
    end 

    factory :customer, :parent => :user do 
    role "customer" 
    end 

    factory :company do 
    name "User Company" 
    association :user, :factory => :customer 
    end 
end 

次に、工場から会社を作成すると、すべて完璧です。データベースに保存してユーザーに関連付けます。クールですが、私がユーザーの能力をテストしようとすると、すべてのテストが失敗します。

の例では、(レールコンソール)があります:

company = Factory(:company) 
=> COMMIT 
Ability.new(company.user) 
=> Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 

しかし

company.user 
=> #<User id: 1, email: "[email protected]", ..., role: "customer"> 

そして

Ability.new(User.find(1)) 
=> #<Ability:0xcf6771c> ... 

私は混乱しています。何か案は?

答えて

2

ユーザーの初期化方法を表示できますか?私はあなたがユーザーまたは会社の工場でいくつかの関連付けを定義していないため、この問題が発生すると思います。

+0

あなたは完全に正しいです。私は私の会社を製品に関連付けることを忘れていました。ありがとう! – user1337413