Railsで404にリダイレクトするにはどうすればいいですか?質問する

Railsで404にリダイレクトするにはどうすればいいですか?質問する

Rails で 404 ページを「偽装」したいと思います。PHP では、次のようにエラー コードを含むヘッダーを送信するだけです。

header("HTTP/1.0 404 Not Found");

Rails ではどのように実現するのでしょうか?

ベストアンサー1

404 を自分でレンダリングしないでください。そうする理由はありません。Rails にはすでにこの機能が組み込まれています。404 ページを表示したい場合は、次のようにrender_404メソッド (またはnot_found私が呼んでいるメソッド)を作成しますApplicationController

def not_found
  raise ActionController::RoutingError.new('Not Found')
end

Rails はAbstractController::ActionNotFound、もActiveRecord::RecordNotFound同じように処理します。

これにより、次の 2 つの点が改善されます。

1) Rails の組み込みrescue_fromハンドラーを使用して 404 ページをレンダリングし、2) コードの実行を中断して、次のような便利な機能を実現します。

  user = User.find_by_email(params[:email]) or not_found
  user.do_something!

醜い条件文を書く必要はありません。

おまけに、テストでの処理も非常に簡単です。たとえば、rspec 統合テストでは次のようになります。

# RSpec 1

lambda {
  visit '/something/you/want/to/404'
}.should raise_error(ActionController::RoutingError)

# RSpec 2+

expect {
  get '/something/you/want/to/404'
}.to raise_error(ActionController::RoutingError)

そしてミニテスト:

assert_raises(ActionController::RoutingError) do 
  get '/something/you/want/to/404'
end

または、詳細情報を参照してくださいRails レンダリング 404 がコントローラアクションから見つかりません

おすすめ記事