Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 如何将FactoryGirl与seed.rb文件一起使用_Ruby On Rails 4_Factory Bot - Fatal编程技术网

Ruby on rails 4 如何将FactoryGirl与seed.rb文件一起使用

Ruby on rails 4 如何将FactoryGirl与seed.rb文件一起使用,ruby-on-rails-4,factory-bot,Ruby On Rails 4,Factory Bot,我的种子文件已加载到我的测试辅助文件中。当我尝试通过工厂创建角色时,验证失败,因为它已经存在(由于种子文件)。但是,如果我使用在种子中创建的角色在工厂中创建关联的角色…我会得到一个错误,因为工厂似乎是在种子文件之前启动的…工厂错误,因为它要查找的角色尚未创建。这让人困惑 此工厂无法通过唯一角色名称验证,因为已通过种子文件创建了角色 FactoryGirl.define do factory :account do user role end end 此工厂(将admin

我的种子文件已加载到我的测试辅助文件中。当我尝试通过工厂创建角色时,验证失败,因为它已经存在(由于种子文件)。但是,如果我使用在种子中创建的角色在工厂中创建关联的角色…我会得到一个错误,因为工厂似乎是在种子文件之前启动的…工厂错误,因为它要查找的角色尚未创建。这让人困惑

此工厂无法通过唯一角色名称验证,因为已通过种子文件创建了角色

FactoryGirl.define do
  factory :account do
    user
    role
  end
end
此工厂(将admin_帐户称为关联)出现错误,因为尚未创建角色

FactoryGirl.define do
  factory :account do
    user

    trait :admin do
      role Role.find_by_name("admin").id # Role "admin" should exist from the seed
    end

    factory :admin_account, traits: [:admin]
  end
end
因此,如果我不使用种子文件,我的工厂将无法进行唯一性验证。如果我确实使用种子文件,工厂将无法为nil:NilClass(NoMethodError)调用未定义的方法'id'


我做错了什么?

要求“factory\u girl\u rails”
添加到您的
db/seeds.rb
文件中

下面是一个例子:

db/seeds.rb

require 'factory_girl_rails'

puts 'Creating Roles.'
%w(guest user admin super-admin super-duper-admin).each do |role|
  FactoryGirl.create(:role, name: role)
end

FactoryGirl.create(:user)

FactoryGirl.create(:admin_user)
FactoryGirl.define do
  factory :role do
    name { "role_#{rand(9999)}" }

    factory :guest_role, parent: :role do
      name 'guest'
    end

    factory :user_role, parent: :role do
      name 'user'
    end

    factory :admin_role, parent: :role do
      name 'admin'
    end
  end
end
FactoryGirl.define do
  factory :user do
    email 'user@example.com'

    factory :admin_user, parent: :user do
      email 'admin@example.com'
      after(:create) {|user| user.add_role(:admin)}
    end
  end
end
spec/factories/roles.rb

require 'factory_girl_rails'

puts 'Creating Roles.'
%w(guest user admin super-admin super-duper-admin).each do |role|
  FactoryGirl.create(:role, name: role)
end

FactoryGirl.create(:user)

FactoryGirl.create(:admin_user)
FactoryGirl.define do
  factory :role do
    name { "role_#{rand(9999)}" }

    factory :guest_role, parent: :role do
      name 'guest'
    end

    factory :user_role, parent: :role do
      name 'user'
    end

    factory :admin_role, parent: :role do
      name 'admin'
    end
  end
end
FactoryGirl.define do
  factory :user do
    email 'user@example.com'

    factory :admin_user, parent: :user do
      email 'admin@example.com'
      after(:create) {|user| user.add_role(:admin)}
    end
  end
end
spec/factories/users.rb

require 'factory_girl_rails'

puts 'Creating Roles.'
%w(guest user admin super-admin super-duper-admin).each do |role|
  FactoryGirl.create(:role, name: role)
end

FactoryGirl.create(:user)

FactoryGirl.create(:admin_user)
FactoryGirl.define do
  factory :role do
    name { "role_#{rand(9999)}" }

    factory :guest_role, parent: :role do
      name 'guest'
    end

    factory :user_role, parent: :role do
      name 'user'
    end

    factory :admin_role, parent: :role do
      name 'admin'
    end
  end
end
FactoryGirl.define do
  factory :user do
    email 'user@example.com'

    factory :admin_user, parent: :user do
      email 'admin@example.com'
      after(:create) {|user| user.add_role(:admin)}
    end
  end
end

require'factory\u girl\u rails'
添加到您的
db/seeds.rb
文件中

下面是一个例子:

db/seeds.rb

require 'factory_girl_rails'

puts 'Creating Roles.'
%w(guest user admin super-admin super-duper-admin).each do |role|
  FactoryGirl.create(:role, name: role)
end

FactoryGirl.create(:user)

FactoryGirl.create(:admin_user)
FactoryGirl.define do
  factory :role do
    name { "role_#{rand(9999)}" }

    factory :guest_role, parent: :role do
      name 'guest'
    end

    factory :user_role, parent: :role do
      name 'user'
    end

    factory :admin_role, parent: :role do
      name 'admin'
    end
  end
end
FactoryGirl.define do
  factory :user do
    email 'user@example.com'

    factory :admin_user, parent: :user do
      email 'admin@example.com'
      after(:create) {|user| user.add_role(:admin)}
    end
  end
end
spec/factories/roles.rb

require 'factory_girl_rails'

puts 'Creating Roles.'
%w(guest user admin super-admin super-duper-admin).each do |role|
  FactoryGirl.create(:role, name: role)
end

FactoryGirl.create(:user)

FactoryGirl.create(:admin_user)
FactoryGirl.define do
  factory :role do
    name { "role_#{rand(9999)}" }

    factory :guest_role, parent: :role do
      name 'guest'
    end

    factory :user_role, parent: :role do
      name 'user'
    end

    factory :admin_role, parent: :role do
      name 'admin'
    end
  end
end
FactoryGirl.define do
  factory :user do
    email 'user@example.com'

    factory :admin_user, parent: :user do
      email 'admin@example.com'
      after(:create) {|user| user.add_role(:admin)}
    end
  end
end
spec/factories/users.rb

require 'factory_girl_rails'

puts 'Creating Roles.'
%w(guest user admin super-admin super-duper-admin).each do |role|
  FactoryGirl.create(:role, name: role)
end

FactoryGirl.create(:user)

FactoryGirl.create(:admin_user)
FactoryGirl.define do
  factory :role do
    name { "role_#{rand(9999)}" }

    factory :guest_role, parent: :role do
      name 'guest'
    end

    factory :user_role, parent: :role do
      name 'user'
    end

    factory :admin_role, parent: :role do
      name 'admin'
    end
  end
end
FactoryGirl.define do
  factory :user do
    email 'user@example.com'

    factory :admin_user, parent: :user do
      email 'admin@example.com'
      after(:create) {|user| user.add_role(:admin)}
    end
  end
end
回答我自己的问题(有点)。不要使用工厂女孩。请注意所有的大写字母。我知道这引起了很多争论……但是,我不得不说,抛弃工厂女孩、抛弃RSpec……以及使用夹具进行小型测试使我的测试环境更易于管理和使用。我喜欢固定装置! 我知道这并不完全是对这个问题的回答……但是,如果有人找到这篇文章,我希望能激励他们简化他们的应用程序,并使用rails提供的工具。

来回答我自己的问题(某种程度上)。不要使用工厂女孩。请注意所有的大写字母。我知道这引起了很多争论……但是,我不得不说,抛弃工厂女孩、抛弃RSpec……以及使用夹具进行小型测试使我的测试环境更易于管理和使用。我喜欢固定装置!
我知道这并不是这个问题的答案……但是,如果有人找到这篇文章,我希望能激励他们简化应用程序,使用rails提供的功能。

你只是在
seeds.rb中创建记录,根本不使用FactoryGirl。是的。这使用了工厂。您只需在
seeds.rb
中创建记录,而根本不使用FactoryGirl。是的。这使用了factory.chrs-但是您能否详细说明为什么夹具比factory_bot和rspec更好/更容易?我现在正在使用这两种方法,这就是为什么我问-是否有兴趣听取您的意见?chrs-但您能否详细说明为什么固定装置比factory_bot和rspec更好/更容易?我现在正在使用这两种方法,这就是为什么我会问-你有兴趣听听你的意见吗?