Factorygirl Admin Creation

时间:2014-01-03 19:19:22

标签: ruby-on-rails ruby nested admin

我正在关注Michael Hartl的在线教程,在清单9.42中,我无法理解代码。

FactoryGirl.define do
  factory :user do
    sequence(:name)  { |n| "Person #{n}" }
    sequence(:email) { |n| "person_#{n}@example.com"}
    password "foobar"
    password_confirmation "foobar"

    factory :admin do
      admin true
    end
  end
end

然后在清单9.43中创建了管理员

  describe "as an admin user" do
    let(:admin) { FactoryGirl.create(:admin) }

我不明白的是如何创建一个没有任何管理员的管理员 代码

   sequence(:name)  { |n| "Person #{n}" }
    sequence(:email) { |n| "person_#{n}@example.com"}
    password "foobar"
    password_confirmation "foobar"

在管理区内?

似乎:admin block嵌套在:user block中,所以:{user}在FactoryGirl.create(:admin)期间在用户块内创建一个用户名,电子邮件,密码的管理员执行:用户块代码?

是吗? 谢谢!

2 个答案:

答案 0 :(得分:4)

假设您已经知道FactoryGirl library works的方式,那么您的问题的解释是:admin工厂在:user工厂内定义

FactoryGirl.define do
  factory :user do
    ...

    factory :admin do
      admin true
    end
  end
end

在这种情况下,:admin将继承用户的所有属性,以及特定的admin: true设置。

FactoryGirl.create(:admin)

答案 1 :(得分:0)

是的,这是正确的。创建嵌套的FactoryGirl对象时,该对象将继承其父级的所有属性。