iT邦幫忙

DAY 27
0

Ruby on Rails 實戰聖經 - 初心者的30天學習記錄系列 第 27

Ruby on Rails (27) - schema 資料庫綱要

  • 分享至 

  • xImage
  •  

在前面我們曾利用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

"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


上一篇
Ruby on Rails (26) - 註冊頁面
下一篇
Ruby on Rails (28) - 顯示錯誤訊息
系列文
Ruby on Rails 實戰聖經 - 初心者的30天學習記錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言