1. ホーム
  2. ruby-on-rails

[解決済み] Railsで404にリダイレクトする方法とは?

2022-03-19 15:51:08

質問

Railsで404ページを「偽装」したいのですが、どうすればいいですか?PHPでは、このようなエラーコードを含むヘッダを送信するだけです。

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

Railsではどうなんでしょうか?

どのように解決するのですか?

自分で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)

そしてminitest。

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

または、以下のサイトを参照してください。 Rails はコントローラアクションから 404 not found をレンダリングします。