【问题标题】:ActiveRecord::Fixture::FixtureError: table "users" has no column named "status"ActiveRecord::Fixture::FixtureError: 表“用户”没有名为“状态”的列
【发布时间】:2017-03-07 00:33:07
【问题描述】:

我正在测试我的 UsersController,它可以让用户激活和停用。 我正在使用固定装置,当我开始测试时,我看到了错误: ActiveRecord::Fixture::FixtureError: 表“用户”没有名为“状态”的列。 我在“locale”字段上看到了同样的错误,但在“role”字段上,一切都很好,为什么?

附:种子效果很好

迁移文件(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: alex@foo.com
  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: li@huan.chi
  login: huan
  password: $2a$10$E5lj6OpvHwJ4ry3zHt7QrOl0cYgeuWwbvSKXtNZeGAvPIxRVnKnmW
  genres: 54
  role: 2
  status: 1
  locale: 1
  created_at: 2016-10-19 08:16:07.539325

种子.rb:

User.create(
  firstname: 'init',
  lastname: 'user',
  login: 'init',
  email: 'example@mail',
  genres: 511,
  role: 1
)

【问题讨论】:

  • 我通常会在添加新列后忘记迁移测试数据库时遇到这些问题。您是否尝试过运行“rake db:migrate RAILS_ENV=test”?

标签: ruby-on-rails testing rspec fixtures


【解决方案1】:

尝试删除列

rails g migration removeStatusFromUsers

然后再次添加。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多