私は次の工場を持っています:
FactoryGirl.define do
factory :group_member do |f|
f.user_id { rand(1..100) }
f.group_id { rand(1..100) }
f.membership { ["accepted", "invited", "declined", "requested", "denied", "left", "removed"].sample }
if "#{membership}" == "accepted"
f.host { [true, false].sample }
else
f.host false
end
end
end
この線:
if "#{membership}" == "accepted"
エラーをスローしています:
Trait not registered: membership
私の意図は、以前に定義された特性 "membership" が "accepted" に設定されているかどうかを確認することです。ただし、その特性にアクセスする方法がわかりません。任意のヒント?
別の注意として、さまざまな特性が割り当てられる変数 (この場合は「f」) がある限り、ファクトリの作成はフォームの作成に似ています。これらのタイプのコード ブロックを説明する言葉はありますか?
更新: after_build 呼び出しを使用するようにファクトリを変更しましたが、次のエラーが発生しています:
undefined method `after_build=' for #<GroupMember:0x5dcb328>
更新されたコードは次のようになります。
FactoryGirl.define do
factory :group_member do |f|
f.user_id { rand(1..100) }
f.group_id { rand(1..100) }
f.membership { ["accepted", "invited", "declined", "requested", "denied", "left", "removed"].sample }
f.after_build do |obj|
if obj.membership == "accepted"
obj.host = [true, false].sample
else
obj.host = false
end
end
end
end