25

Ruby on Railsプロジェクトで、404サーバーの応答コードとともにpublic/404.htmlページを返す名前付きルートを指定する必要があります。

空白のままにすることはできません。理由を疑わないでください。理由は疑問ではありません:)絶対に名前付きルートである必要があります。そうでない場合は、map.connectエントリで十分です。

このようなものは素晴らしいでしょう:

map.my_named_route '/some/route/', :response => '404'

誰もがこのようなことをする最も簡単な方法が何であるかを知っています。404.htmlファイルをレンダリングするコントローラーメソッドを作成することもできますが、これを行うための既存のよりクリーンな方法があるのではないかと考えました。返信をお待ちしております-ありがとう、

エリオット

4

4 に答える 4

50

単純な404を販売するラックエンドポイント(レール3)にルーティングできます。

match 'my/route', to: proc { [404, {}, ['']] }

これは、たとえば、omniauthエンドポイントへの名前付きルートを定義する場合に特に便利です。

match 'auth/:action', to: proc { [404, {}, ['']] }, as: :omniauth_authorize
于 2012-08-24T22:51:09.313 に答える
3

あなたのroutes.rbで:

map.my_404 '/ohnoes', :controller => 'foobar', :action => 'ohnoes'

FoobarController

def ohnoes
  render :text => "Not found", :status => 404
end

通常の404と同じ404ファイルをレンダリングする必要がある場合は、を使用してレンダリングできますrender :file

例については、 ActionController::Baseのドキュメントを参照してください。

于 2009-07-17T07:16:05.213 に答える
2

mod_rewriteを使用して(またはnginxが書き換えを行う)Apache / nginxでこれを行わないのはなぜですか?存在しないページにリンクするか、代わりに410(なくなった、もう存在しない)フラグを送信しますか?

とにかく、railsアプリでこれを実行したい場合は、提案したとおりに、アクションへの名前付きルートを作成して、render(:file => "#{RAILS_ROOT}/public/404.html", :status => 404)

于 2009-07-16T19:30:31.033 に答える
1

404への以前の回答よりもわずかに短いバージョンは1行になります。 get '*_', to: ->(_) { [404, {}, ['']] }

于 2017-07-18T08:49:38.627 に答える