Ruby on rails 如何在rspec中创建关联对象?

Ruby on rails 如何在rspec中创建关联对象?,ruby-on-rails,ruby-on-rails-4,rspec,factory-bot,rspec2,Ruby On Rails,Ruby On Rails 4,Rspec,Factory Bot,Rspec2,请帮忙解决这个问题。我需要通过gem factory_girl使对象成为“用户” 数据库模式: create_table "statuses", force: :cascade do |t| t.string "title" end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypt

请帮忙解决这个问题。我需要通过gem factory_girl使对象成为“用户”

数据库模式:

create_table "statuses", force: :cascade do |t|
  t.string "title"
end

create_table "users", force: :cascade do |t|
  t.string   "email",                  default: "", null: false
  t.string   "encrypted_password",     default: "", null: false
  t.integer  "status_id",              default: 0
  t.string   "name"
end
factories/users.rb:

FactoryGirl.define do
  factory :user do
    sequence(:name){ |i| "us#{i}" }
    sequence(:email){ |i| "us#{i}@ad.ad" }
    password 'qwerty'
    password_confirmation{ |u| u.password } 
    status_id FactoryGirl.create(:status0)  
  end
end
工厂/状态.rb:

FactoryGirl.define do
  factory :status0 do
    id 0
    title 'user'
  end

  factory :status1 do
    id 1
    title 'manager'
  end

  factory :status2 do
    id 2
    title 'admin'
  end    
end
规格/控制器/用户\u控制器\u规格.rb:

describe UsersController, type: :controller do
  describe 'users:index action' do
    it 'check response status code for index page' do
      user = FactoryGirl.create(:user)  
      visit users_path
      expect(response).to be_success 
    end 
  end 
end 
但运行后测试控制台显示以下错误消息:

kalinin@kalinin ~/rails/phs $ rspec spec/controllers/users_controllers_spec.rb:104
/home/kalinin/.rvm/gems/ruby-2.0.0-p598/gems/activesupport-4.2.1/lib/active_support/inflector/methods.rb:261:in `const_get': uninitialized constant Status0 (NameError)
  from /home/kalinin/.rvm/gems/ruby-2.0.0-p598/gems/activesupport-4.2.1/lib/active_support/inflector/methods.rb:261:in `block in constantize'
......
............

您可以使用
关联
关键字定义两个工厂之间的关联

所以,你们的工厂应该是这样的:

FactoryGirl.define do
  factory :user do
    sequence(:name){ |i| "us#{i}" }
    sequence(:email){ |i| "us#{i}@ad.ad" }
    password 'qwerty'
    password_confirmation{ |u| u.password }
    association :status
  end
end

FactoryGirl.define do
  factory :status do
    sequence(:id){ |id| id }
    title 'user'
  end
end
关联:状态
将确保
用户
状态
工厂之间的关联

你可以看到更多的工厂女孩协会的例子