【问题标题】:Factories assign association after created工厂创建后分配关联
【发布时间】:2013-11-02 12:00:39
【问题描述】:

我有一个关于 Rails 4 的问题。

在我的 factories.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

我如何在 factories.rb 上做到这一点?

现在我要做什么:

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

我想在 factories.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

感谢彼得·阿尔文

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 factory-bot rspec-rails


    【解决方案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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多