0

Rails4について質問です。

私のfactory.rbには、次のようなものがあります。

factory :user do
   sequence(:name)   { |n| "User #{n}" }
   sequence(:email)  { |n| "user_#{n}@example.org" }
   password 'foobar'
   password_confirmation 'foobar'
end

問題は、ユーザーを作成した後に関係を追加する方法がわかりません。

ユーザーを作成し、彼がモデレーターである場合、次のような役割をユーザーに割り当てます。

u.add_role_id!(11)

user_idrole_idを使用した関係用の別のテーブルがあり、ユーザーモデルにはメソッドがあります。

def add_role_id!(role)
   role_user_relationship.create!(role_id: Role.find(role).id)
end

factory.rb でそれを行うにはどうすればよいですか?

今私がやるべきこと:

u = FactoryGirl.create(:moderator)
u.add_role_id!(11)

factory.rbにデフォルトで割り当てたい

どうやってそれをするのですか?

みんなありがとう!

マヌー

解決:

これらの行を追加する必要があります:

after(:create) do |u|
  u.add_roles_ids!([10,20,30])
end

コード全体で:

factory :user do
   sequence(:name)   { |n| "User #{n}" }
   sequence(:email)  { |n| "user_#{n}@mudev.org" }
   password 'foobar'
   password_confirmation 'foobar'

   after(:create) do |u|
      u.add_roles_ids!([10,20,30])
   end
end

ピーター・アルフヴィンに感謝

4

1 に答える 1

1

https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#callbacksで説明されている FactoryGirl のafterコールバック メカニズムを使用して、ファクトリ定義に以下を含めることで、現在行っている動作と同等の動作を得ることができます。

after(:create) {|u| u.add_role_id!(11)

検証に応じて、代わりにこれafter(:build)またはを実行できますbefore(:create)

于 2013-11-02T15:29:34.150 に答える