首先,來聽首歌吧
https://www.youtube.com/watch?v=o3mP3mJDL2k&list=PLkhh3Z0uci2ro3N18l9YzDp5_hn1jBEgI&index=8&t=0s
今天來拉丁一下吧!
今天講到這篇的第 14 章
大家一定有經驗看到 404 Not Found 這幾個大字在你的螢幕上出現吧,我們今天要講的就跟這有關!
在 Rails 的系統中預設,如果有個遠端的 request 過來,但依循路徑找不到指定的網頁,會出現 "404 Not Found" 的頁面,如果是其他錯誤則會出現 "500 Server Error" 的頁面
那麼這些頁面藏在哪裡呢?請看下圖~
燈燈!答案揭曉!他們就藏在專案的 public 資料夾裡面
既然他們本身是檔案,表示你也可以客製化這些頁面的內容,讓別人進來你頁面找不到內容時不再是醜醜的 404 not found 幾個字而已了!
直接在網址加上 404 檔案的路徑可以直接連到頁面,不用更改 routes 檔案喔!也可以更改檔案裡面的內容
另外,在 public 資料夾的檔案有個特性是,不需要路徑設定就可以顯示出內容,為什麼要這樣設計呢?
想想以下情境:如果今天有個人要找頁面找不到,伺服器請他去找 404 頁面,結果又因為沒有設定 404 的路徑,又再次找不到頁面,伺服器又再請他去找 404 頁面... 這樣不就陷入了無窮迴圈了!?因此在 public 資料夾內的檔案才會設計成不需要路徑設定也能顯示內容!
我們也可以盡量不讓這種伺服器錯誤發生,對可以預期到的錯誤或例外先捕捉做處理
使用的方式是把出現的錯誤訊息放在 rescue_from
後面,然後把要做的事情放在 with
這個 option 後面
#application_controller.rb
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, with: :not_found_site
private
def not_found_site
render plain: "404 Not Found",
status: :not_found
end
end
在這例子中,使用一個方法接在 with 後面,除了方法外也是可以使用 Proc 喔!
參考資料:
本文章同步分享於 http://anthonychao.site/