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
caredateファクトリの前にfactories.rbで定義されているプロバイダファクトリの場合に機能します。ありがとう! –
順序の依存関係は良い点です.2つのファクトリが別々のファイルで定義されている場合はさらに悪化します。ある時点で、このような場合に器具を使用する方が理にかなっているかどうか疑問です。 – zetetic
これはdbとloadスキーマを再構築しようとするまで機能しました。 FactoryGirlがテーブルを探しているようです。 'rake db:schema:load --trace ... レーキが中止されました! テーブル 'claimaway_development.providers'は存在しません。[ここ](http://groups.google.com/group/factory_girl/browse_thread/thread/4852f1a129d72839)はディスカッションですが、このソリューションを使用できませんでした。 –