站內連結聯到找不到的頁面時,會連結到錯誤畫面(因為我用find方法,找不到會直接顯示錯誤訊息)
這時我們就可以用rescue_from
捕捉意外,捕捉到什麼呢?
ActiveRecord::RecordNotFound 這個錯誤訊息,並且呼叫”record_not_found”(其實可以叫做not_found,只是為了避免以後又有其他not_found系列的方法要再修正比較麻煩,命名準確一點方便維護)
1 | ActionController::Base |
既然呼叫了,我們還是要再建立一個叫做record_not_found的方法:
這個方法要做什麼呢?就是要渲染我們想要的頁面(為什麼不是跳轉?第一個是我們沒有給404檔案裝路徑,第二是因為我們要留在原本找不到的那個網址)
渲染別的檔案我們使用render file
,要找到不是在view資料夾裡面的404.html檔案的話可以用”#{Rails.root}”,意思是我要在這個Rails專案的目錄下尋找XXX,後面接上路徑就是到某個資料夾尋找某個檔案
1 | render file: "#{Rails.root}/public/404.html" |
渲染成功,打開網路狀態會看到這樣的結果
網路狀態200(正常的找到你的”找不到”頁面),我們也希望網路的狀態被改成404,在render file後面設定一個status: 404 ,就會得到這樣的畫面
獲得真正的404頁面!
完整程式碼:
1 | ActionController::Base |