【发布时间】: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参数传递 - 将其设为布尔值并保持true或false不是更好吗? -
是的,您可以将
is_admin设为boolean字段而不是string -
原因是:我第一次写这篇文章时是个菜鸟:P。我还在学习,但我想更新模型来解决这类问题。我在任何地方都使用了字符串,尽管它有效,但它一团糟。感谢您的建议!
标签: ruby-on-rails ruby ruby-on-rails-3 rspec