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 がコントローラアクションから見つかりません