在前面我們曾利用migration新增了這個欄位password_digest來儲存加密過的密碼
然而當我實際上執行時,執行到 user.save 這個動作時程式就會出錯
錯誤訊息是Undefined method password_digest (未定義的方法)
覺得應該是migration的問題,又重新執行了一次 db:migrate
嗯⋯⋯沒效。
我實在是覺得很無言,沒想到照著書本key還會出錯⋯⋯
後來找阿找,終於在http://stackoverflow.com/questions/15376974/rails-4-has-secure-password 找到了方向
這篇的原PO跟我們一樣在處理類似的問題,雖然不太一樣,但它放上了他自己的原始碼
包含model, controller, 以及 "schema"
"schema" what's that!? Is it good to drink?
搜尋了一下,原來schema是資料庫的綱要檔案,位置在db/schema.rb
如果要確定資料庫目前的結構,看這個檔案才是最準確的。
果然,打開schema一看,裡面根本沒有password_digest這個欄位,難怪會出錯!
知道了問題在哪裡就好解決了,直接把migration還原到最初版本
這邊用的語法是
$ rake db:migrate VERSION = 20141021160437
最後那串數字就是你要想回去的migration的時間戳記
還原到最初的版本後再重新執行一次 $ rake db:migrate 就成功了
下面是最後的schema code 以及成功執行的畫面
ActiveRecord::Schema.define(version: 20141023163151) do
create_table "users", force: true do |t|
t.string "name"
t.string "email"
t.datetime "created_at"
t.datetime "updated_at"
t.string "password_digest"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
end