我正在测试我的UsersController,它使用户激活和停用。我使用fixtures,当我开始测试时,我看到错误:ActiveRecord :: Fixture :: FixtureError:表“users”没有名为“status”的列。我在“locale”字段中看到的同样的错误,但在“角色”字段上,一切都很好,为什么?
附:种子运作良好
迁移文件(db / migrate / 20160915110112_create_users.rb):
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
t.string :firstname, null: false
t.string :lastname, null: false
t.string :email, null: false
t.string :login, index: true, null: false
t.string :password, null: false
t.integer :genres, null: false
t.integer :role, null: false
t.integer :status, null: false
t.integer :locale, null: false
t.datetime :created_at, null: false
end
end
end
用户模型(app / models / user.rb):
class User < ApplicationRecord
validates :login, presence: true, uniqueness: true
validates :email, presence: true, uniqueness: true
validates :genres, presence: true, numericality: true
validates :role, presence: true
enum status: { activated: 1, deactivated: 2 }
enum locale: { ru: 1, en: 2 }
enum role: { creator: 1, admin: 2 }
before_create do
self.firstname.capitalize!
self.lastname.capitalize!
self.password = password_generate
self.status = :activated
self.locale = :ru
end
...
private
def password_generate
@password = SecureRandom.base64(8)
BCrypt::Password.create(@password)
end
end
夹具文件(spec / fixtures / users.yml):
alex_foo:
id: 1
firstname: Alex
lastname: Foo
email: [email protected]
login: foo
password: $2a$10$E5lj6OpvHwJ4ry3zHt7QrOl0cYgeuWwbvSKXtNZeGAvPIxRVnKnmW
genres: 46
role: 1
status: 1
locale: 1
created_at: 2016-10-19 08:16:07.539325
li_huan:
id: 2
firstname: Li
lastname: Huan
email: [email protected]
login: huan
password: $2a$10$E5lj6OpvHwJ4ry3zHt7QrOl0cYgeuWwbvSKXtNZeGAvPIxRVnKnmW
genres: 54
role: 2
status: 1
locale: 1
created_at: 2016-10-19 08:16:07.539325
seeds.rb:
User.create(
firstname: 'init',
lastname: 'user',
login: 'init',
email: 'example@mail',
genres: 511,
role: 1
)
尝试删除列
rails g migration removeStatusFromUsers
然后再添加它。