2014-02-13 98 views
0

我正在使用Ruby on Rails 4用于用户身份验证设计。Rails 4,设计 - 无法更新用户名从rails控制台

我有从控制台创建用户的问题,也没有从编辑的设计注册视图。我可以设置密码和电子邮件,但我无法设置用户名,我必须创建用户名称,然后使用SQL命令(“UPDATE users SET ...”)从dbconsole更改它。然后我可以用用户名登录。

我的用户表:

create_table "users", force: true do |t| 
    t.string "name",    default: "", null: false 
    t.string "email",    default: "", null: false 
    t.string "encrypted_password", default: "", null: false 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",  default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
end 

我的用户模型:

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :rememberable, :trackable, :validatable 

    validates_presence_of :name, :email, :password 
    attr_accessor :name 
end 

当我尝试

u = User.new 
u.name = "test" 

从铁轨控制台保持空白。

回答

0

尝试删除这一行:

attr_accessor :name 
+0

谢谢,它的工作,但是为什么呢? – FuF

+0

'attr_accessor'是一个用于定义实例变量访问器的Ruby方法。 Rails(4.0之前)有用于参数保护的'attr_accessible'方法。他们经常混在一起。当你调用'attr_accessor'时,你搞砸了你的领域的Rails访问器。 – marvelousNinja

+0

基本上,'ActiveRecord'神奇地为数据库中的列定义了getter/setter方法。当你执行'attr_accessor:name'时,你用常规的ruby getter/setter方法覆盖那些只获取/设置实例变量'@ name'的方法,它与数据库字段没有关联。 – gregates