[解決済み] FactoryBotでhas_manyアソシエーションを使用してファクトリーをセットアップする方法
質問
私が間違った方法でセットアップしているのかどうか、誰か教えてください。
私はhas_many.throughの関連付けを持っている以下のモデルを持っています。
class Listing < ActiveRecord::Base
attr_accessible ...
has_many :listing_features
has_many :features, :through => :listing_features
validates_presence_of ...
...
end
class Feature < ActiveRecord::Base
attr_accessible ...
validates_presence_of ...
validates_uniqueness_of ...
has_many :listing_features
has_many :listings, :through => :listing_features
end
class ListingFeature < ActiveRecord::Base
attr_accessible :feature_id, :listing_id
belongs_to :feature
belongs_to :listing
end
Rails 3.1.rc4, FactoryGirl 2.0.2, factory_girl_rails 1.1.0, rspecを使用しています。 以下は、私の基本的なrspecのサニティチェックです。
:listing
ファクトリーのサニーチェックです。
it "creates a valid listing from factory" do
Factory(:listing).should be_valid
end
以下はFactory(:listing)です。
FactoryGirl.define do
factory :listing do
headline 'headline'
home_desc 'this is the home description'
association :user, :factory => :user
association :layout, :factory => :layout
association :features, :factory => :feature
end
end
は
:listing_feature
と
:feature
ファクトリーも同様に設定されます。
もし
association :features
の行がコメントアウトされていれば、私のテストはすべてパスします。
であるとき
association :features, :factory => :feature
エラーメッセージは
undefined method 'each' for #<Feature>
というもので、私は意味があると思っていたのですが、なぜなら
listing.features
は配列を返すからです。 そこで、私はこれを
association :features, [:factory => :feature]
というエラーが表示されます。
ArgumentError: Not registered: features
この方法でファクトリーオブジェクトを生成することは、単に賢明ではないのでしょうか、それとも何か見逃しているのでしょうか? どんな意見でも本当にありがとうございます。
どのように解決するのですか?
このような関連付けを行うには、FactoryGirlのコールバックを使用する必要があります。
完璧なサンプルはここにある。
https://thoughtbot.com/blog/aint-no-calla-back-girl
例題に持ち込むと
Factory.define :listing_with_features, :parent => :listing do |listing|
listing.after_create { |l| Factory(:feature, :listing => l) }
#or some for loop to generate X features
end
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン