在Rails 3中使用rename_column迁移后出现未知属性错误

时间:2015-01-02 15:41:35

标签: ruby-on-rails ruby ruby-on-rails-3 rspec

我正在开发Rails 3应用,我正在尝试更新我的用户模型。我有一个“角色”属性,我通过以下迁移更改为“is_admin”属性。

class ChangeRoleToIsAdminForUser < ActiveRecord::Migration
   def up
     rename_column :users, :role, :is_admin
   end

   def down
     rename_column :users, :is_admin, :role
   end
end

之后,我运行以下命令来更改schema.rb文件。

rake db:migrate

这是生成的schema.rb文件。

ActiveRecord::Schema.define(:version => 20150102142012) do

  [...]

  create_table "users", :force => true do |t|
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
    t.string   "login"
    t.string   "password_digest"
    t.string   "salt"
    t.string   "email"
    t.string   "name"
    t.string   "activated"
    t.string   "is_admin"
  end

end

您可以看到该属性已成功修改。问题出在我的测试上。我用Rspec。在更改属性名称之前,我的所有测试都运行正常。现在,当我运行测试时,我收到错误

ActiveRecord::UnknownAttributeError: unknown attribute: is_admin

这是我的测试文件的一部分。该错误被认为是在***行。

describe 'testing attributes' do

  before(:each) do
    @valid_attributes = {name: 'Un Tuteur',
                       login: 'tuteur',
                       password: 'password',
                       password_confirmation: 'password',
                       email: 'emilie.picard.cantin@gmail.com',
                       activated: 'oui',
                       is_admin: 'usager'}
    @user = User.new(@valid_attributes)  ***
    @user.save
  end

  [...]
end

我更改了user.rb文件和users_controller.rb文件中的属性名称。我不知道问题是什么......

2 个答案:

答案 0 :(得分:5)

请在运行规范之前运行rake db:test:prepare

答案 1 :(得分:0)

RAILS_ENV=test rake db:migrate应解决此问题,因为正在运行rake db:migrate仅在开发环境中应用更改