ror restful rails generate ruby-on-rails routing routes http-status-code-404

ruby on rails - restful - La forma más sencilla de definir una ruta que devuelve un 404



routes in ruby on rails (4)

Tengo un requisito para especificar una ruta con nombre en un proyecto de Ruby on Rails que devuelve la página pública / 404.html junto con el código de respuesta del servidor 404.

Dejarlo en blanco no es una opción, por favor no preguntes por qué, simplemente es :) Absolutamente debe ser una ruta con nombre, o una entrada map.connect haría.

Algo como esto sería genial:

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

Cualquiera tiene alguna idea de cuál es la forma más fácil de hacer algo como esto. Podría crear un método de controlador que muestre el archivo 404.html pero pensé que podría haber una forma más limpia de hacerlo. Esperando cualquier respuesta - gracias,

Eliot


¿Por qué no haces esto en Apache / nginx donde usas mod_rewrite (o, sin embargo, nginx se vuelve a escribir) para enlazar a una página inexistente o en su lugar envía un marcador 410 (Desaparecido, ya no existe)?

De todos modos, si desea que la aplicación Rails haga esto, creo que la forma es la que sugirió, cree una ruta con nombre a una acción que render(:file => "#{RAILS_ROOT}/public/404.html", :status => 404) un render(:file => "#{RAILS_ROOT}/public/404.html", :status => 404)


En tus rutas .rb:

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

En FoobarController :

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

Si necesita renderizar el mismo archivo 404 que un 404 normal, puede hacerlo con render :file .

Consulte la documentación de ActionController::Base para ver ejemplos.


Puede enrutar a un punto final de rack (rieles 3) que vende un 404 simple:

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

Esto es particularmente útil, por ejemplo, para definir una ruta con nombre a su punto final de omniauth :

match ''auth/:action'', to: proc { [404, {}, ['''']] }, as: :omniauth_authorize


Versión ligeramente más corta que las respuestas anteriores a 404, cualquier línea en cualquier línea. get ''*_'', to: ->(_) { [404, {}, ['''']] }