2010-12-10 5 views
5

Google検索とテストの数時間後にこの問題に対する明らかな答えを見つけられたはずです。工場の女の子の従属属性

私はcaredate.user_id => provider.user_idをケアデート工場内に設定したいと考えています。

テストエラー:

​​

は、私がテストしたときに、ブラウザを経由して動作しますActiveRecordの検証を持っている:

class Caredate < ActiveRecord::Base //works fine when testing via browser 
    belongs_to :user 
    belongs_to :provider 

    validates_presence_of :user_id 
    validates_presence_of :provider_id 
    validate :user_must_be_same_as_provider_user 

    def user_must_be_same_as_provider_user 
    errors.add(:user_id, "must be same as provider user") unless self.user_id == self.provider.user_id 
    end 

end 

//factories.rb 
Factory.define :user do |f| 
    f.password "test1234" 
    f.sequence(:email) { |n| "foo#{n}@example.com" } 
end 

Factory.define :caredate do |f| 
    f.association :provider 
    **f.user_id { Provider.find_by_id(provider_id).user_id } //FAILS HERE** 
end 

Factory.define :provider do |f| 
    f.association :user 
end 

私の謝罪これは以前に回答されている場合。私はいくつかの異なるオプションを試してみることができませんでした。

更新:これは検証に合格するので、近づいています。私は乱数でハックすることができます。

Factory.define :caredate do |f| 
    f.association :user, :id => 779 
    f.association :provider, :user_id => 779 
end 

答えて

6
Factory.define :caredate do |f| 
    provider = Factory.create(:provider) 
    f.provider provider 
    f.user provider.user 
end 
+0

caredateファクトリの前にfactories.rbで定義されているプロバイダファクトリの場合に機能します。ありがとう! –

+0

順序の依存関係は良い点です.2つのファクトリが別々のファイルで定義されている場合はさらに悪化します。ある時点で、このような場合に器具を使用する方が理にかなっているかどうか疑問です。 – zetetic

+1

これはdbとloadスキーマを再構築しようとするまで機能しました。 FactoryGirlがテーブルを探しているようです。 'rake db:schema:load --trace ... レーキが中止されました! テーブル 'claimaway_development.providers'は存在しません。[ここ](http://groups.google.com/group/factory_girl/browse_thread/thread/4852f1a129d72839)はディスカッションですが、このソリューションを使用できませんでした。 –

0

after_createまたはafter_buildでUSER_IDを設定してみてください。そうでない場合、私は、複数のエラーを取得し、caredate工場:caredate工場を

Factory.define :caredate do |f| 
    f.after_create { |caredate| caredate.user_id = caredate.provider.user_id } 
end 
+0

私は、既存の変更を意味すると仮定しています。 残念ながら、どちらも動作していません。私は検証がオブジェクトを保存しようとすると失敗するので、 "after_create"ステージに到達することはないと信じています。 提案していただきありがとうございます。私は物事を試し続けています。 –

関連する問題