ActiveRecord::Fixture::FixtureError: в таблице «пользователи» нет столбца с именем «статус»

#ruby-on-rails #testing #rspec #fixtures

#ruby-on-rails #тестирование #rspec #приспособления

Вопрос:

Я тестирую свой UsersController, который активирует и деактивирует пользователей. Я использую fixtures, и когда я запускаю свои тесты, я вижу ошибку: ActiveRecord::Fixture::FixtureError: в таблице «пользователи» нет столбца с именем «статус». Ту же ошибку я вижу в поле «locale», но в поле «роль» все в порядке, почему?

P.S. Исходные данные работают хорошо

Перенести файл (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
  

файл fixture (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
  

seeds.rb:

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

Комментарии:

1. Обычно я сталкиваюсь с этими проблемами, когда забываю перенести свою тестовую базу данных после добавления новых столбцов. Вы пробовали запускать ‘rake db: migrate RAILS_ENV=test’?

Ответ №1:

Попробуйте удалить столбец

 rails g migration removeStatusFromUsers
  

а затем добавляю его снова.