2014-02-13 97 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