2017-10-03 14 views
0

私はRailsには比較的新しいので、ルーティングについてはまだ分かりません。ユーザーが特定のエラーコード(404)を取得したときに、特定のビュー(404.html.erbなど)を表示するにはどうすればよいですか?たとえば、ユーザーが存在しないページを取得した場合(404)、そのイベントをリッスンして特定のページを表示するにはどうすればよいですか?

Railsアプリにはpublicフォルダがあり、404、500、422のエラーコード.htmlページがあらかじめ生成されていますが、私にとってはうまくいかないようです。存在しないページに行くと、GETエラーが発生します。どうすればこれを変更できますか?

ありがとうございます!Rails:特定のステータスコードでページを表示するにはどうすればよいですか?

答えて

1

通常のコントローラビューテンプレートと同じように、カスタムルートを設定してコントローラから動的ページをレンダリングできます。

not_found.html.erb

のconfig/routes.rbを

MyApp::Application.routes.draw do 
    # custom error routes 
    match '/404' => 'errors#not_found', :via => :all 
    match '/500' => 'errors#internal_error', :via => :all 
end 

アプリ/コントローラ/ errors_controller.rb

class ErrorsController < ApplicationController  
    def not_found 
    render(:status => 404) 
    end 
end 

アプリ/ビュー/エラー/

<div class="container"> <div class="align-center"> <h3>Page not found</h3> <%= link_to "Go to homepage", root_path %> </div> </div> 
0

ローカルホストからパブリックページにアクセスできます。 Railsは、そのエラーが発生すると自動的にそれらのページを使用します。あなたは以下のように行うことができます

localhost:3000/404 # => renders the 404.html 
localhost:3000/500 # => renders the 500.html 
0

:これらの変更後の

# in config/application.rb 
config.exceptions_app = self.routes 

# For testing on development environment, need to change consider_all_requests_local 
# in config/development.rb 
config.consider_all_requests_local = false 

再起動サーバー。

# in routes.rb 
get '/404', to: 'errors#not-found' 
get '/422', to: 'errors#unprocessable-entity' 
get '/500', to: 'errors#internal-error' 
関連する問題