route.rb
match '/:code' => redirect('/information/%{code}'), via: [:get]
match '*path' => 'front#render_404',via: [:get]
より、/path
できたものはinformationコントローラに行くようになっていて、showメソッド
で精査するんだけど、現状500error
の画面が出てきているのをpage not found 404エラー
を表示したい
def show
@information = Information.find_by_code(params[:code])
gon.code = params[:code]
rescue
binding.pry
render 'errors/404', status: :not_found
end
こちらより、
find
はActiveRecord::RecordNotFound
と例外が吐かれるが
find_by_code
は検索メソッドなのでエラーではなくnilがかえる。
なので上記コードはrescueに引っかからない。
なので、nilのときは404エラーにレンダリングする形を取ってみる。
def show
@information = Information.find_by_code(params[:code])
render 'errors/404', status: :not_found if @information.nil?
gon.code = params[:code]
end
解決