【问题标题】:Unknown attribute error after using rename_column in migration in Rails 3在 Rails 3 的迁移中使用 rename_column 后出现未知属性错误
【发布时间】:2015-01-02 15:41:35
【问题描述】:

我正在开发 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 文件中的属性名称。不知道是什么问题……

【问题讨论】:

  • 请发你的模特User
  • 您是否在您的User 模型中定义attr_accessible?还有一个有点不同的问题 - 为什么将 'oui' 字符串作为 activated 参数传递 - 将其设为布尔值并保持 truefalse 不是更好吗?
  • 是的,您可以将is_admin 设为boolean 字段而不是string
  • 原因是:我第一次写这篇文章时是个菜鸟:P。我还在学习,但我想更新模型来解决这类问题。我在任何地方都使用了字符串,尽管它有效,但它一团糟。感谢您的建议!

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 2010-11-01
      • 2015-01-13
      • 2011-02-17
      • 1970-01-01
      • 2022-10-16
      相关资源
      最近更新 更多