【问题标题】:factory girl rails traits for model associations工厂女孩为模特协会提供特质
【发布时间】:2014-04-03 07:15:45
【问题描述】:

我正在尝试设置我的工厂女孩​​,当我传入create(:user, :admin) 时,它将创建一个用户并在角色模型/表中添加一条记录。我的联想是,User has_one Role,Role belongs_to User

这是我工厂女孩的设置

FactoryGirl.define do
  factory :user do
    name                   "Test User"
    email                  "test_user@serviceseeking.com.au"
    contact_phone          "0412345678"
    password               "123123"
    password_confirmation  "123123"
    skip_email_validation  true

    trait :as_admin do
      factory(:role) { name  "Untouchable" }
    end

  end
end

但由于某种原因,它没有创建角色。

【问题讨论】:

    标签: ruby-on-rails factory-bot


    【解决方案1】:

    你遇到了什么错误?

    我认为你应该得到一个错误,说没有名为:admin 的特征。如果您想通过调用 create(:user, :admin) 创建管理员用户,您的 trait 必须命名为 :admin

    其次,我还认为您想要在 :admin 特征中执行的操作是:

    trait :admin do
      role name: "Untouchable"
    end
    

    如果您设置了关联并为 Role 创建了一个名为 :role 的工厂,这应该创建一个名为 Role 的记录,名称为 "Untouchable",并将其与您的用户关联。

    我希望这会有所帮助!

    【讨论】:

    • as_admin/admin 部分只是一个错误。感谢您的回答,这是我需要的。我很难使用测试设置而不是测试本身 XD
    • 嗨,我可以问一个后续问题吗?我实际上修改了您的答案以使其正常工作,而不是 role name: "Untouchable" 我只是将 role 放在 trait 方法中。所以我的问题是,我想让你的代码工作,因为我的角色工厂有一个默认的“名称”设置,我想要的是,如果我调用用户的 :admin 特征,它将覆盖角色的“名称”到“触不可及”。当我尝试你的答案时,我收到一个错误Role(#108171720) expected, got Hash
    • 抱歉,您不能将选项传递给这样的隐式关联。如果您尝试使用association :role, name: "Untouchable" 而不是role name: "Untouchable"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    相关资源
    最近更新 更多