数据库未在rails迁移中完全更新

时间:2013-11-04 09:32:26

标签: ruby-on-rails ruby ruby-on-rails-3 migration rake

我是Ruby on Rails的新手。我有一个名为创建用户

的迁移
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.column :username, :string,        :limit => 25, :default => "", :null => false
      t.column :hashed_password, :string, :limit => 40, :default => "", :null => false
      t.column :first_name, :string,      :limit => 25, :default => "", :null => false
      t.column :last_name, :string,       :limit => 40, :default => "", :null => false
      t.column :email, :string,           :limit => 50, :default => "", :null => false
      t.column :display_name, :string,    :limit => 25, :default => "", :null => false
      t.column :user_level, :integer,     :limit => 3,  :default => 0,  :null => false
    end

 User.create(:username=>'test',:hashed_password=>'test',:first_name=>'test',:last_name=>'test',:email=>'test@test.com',:display_name=> 'test',:user_level=>9)  
  end
end

当我运行rake db:migrate时,使用上面提到的列创建表,但测试数据不存在

mysql>select * from users;
Empty set (0.00 sec)

编辑我刚刚删除了整个数据库并重新启动了迁移,现在它显示以下错误。

rake aborted!
An error has occurred, all later migrations canceled:

Can't mass-assign protected attributes: username, hashed_password, first_name, last_name, email, display_name, user_level

我做错了什么请帮忙? 谢谢。

3 个答案:

答案 0 :(得分:1)

添加

attr_accessible :username, :hashed_password, :first_name, :last_name, :email, :display_name, :user_level

到你的user.rb

答案 1 :(得分:0)

这是Rails禁止用户通过param哈希创建或更新对象的方法。您需要在模型中将用户属性指定为attr_accessible

示例:

class User
 attr_accessible :username, :firstname (etc)
end

详细了解质量分配here

答案 2 :(得分:0)

只是为了完成有关测试环境的答案。您可以运行rake db:test:prepare来检查迁移并加载架构!