2

私は次の工場を持っています:

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
4

1 に答える 1

2

Re: すでに設定されている値を確認しています。

f.after_build do |obj|   
  # Test your obj.membership here. 
end

Re:after_build存在しないというエラー メッセージが表示されます。

あなたの定義構文は見栄えが悪い。これを変える:

FactoryGirl.define do
  factory :group_member do |f|

これに:

FactoryGirl.define :group_member do |f|
于 2013-01-17T16:32:06.030 に答える