2009-04-23 7 views

Respuesta

35

Esto parece buena ...

# Rails 2 and below 
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404 

# Rails 3 and up 
render :file => "#{Rails.root}/public/404.html", :status => 404 
+6

[Esta respuesta ] (http://stackoverflow.com/questions/2385799/how-to-redirect-to-a-404-in-rails#answer-4983354) en otra pregunta me parece más poderosa. Bonificación: incluye el código de prueba :-) – webmat

+2

Use Rails.root.to_s en lugar de RAILS_ROOT en las versiones posteriores de los rieles – deb

+1

@deb ¿Qué diferencia hace? La interpolación de cadenas llamará 'to_s' implícitamente. –

6

Reference:

render :file => '/path/to/some/filenotfound.rhtml', 
       status => 404, :layout => true 
+0

Esto es un poco más agradable ... –

6

En el ApplicationController definir un método como:

def render_404 
    render :file => "#{RAILS_ROOT}/public/404.html", :status => 404 
end 
30

También puede

raise ActiveRecord::RecordNotFound

excepción.

+1

por ejemplo usando '.find_by!' O '.first!' –

23

la siguiente manera era lo mejor para mí:

raise ActionController::RoutingError.new('Not Found') 

o simplemente

raise ActionController::RoutingError, 'Not Found' 

O hay otras soluciones: How to redirect to a 404 in Rails?

+2

Igual pero más simple: 'raise ActionController :: RoutingError, 'Not Found'' –

0

Si desea emitir un código de estado en una redirección (por ejemplo, 302), puede poner esto en routes.rb:
get "/somewhere", to: redirect("/somewhere_else", status: 302).
Sin embargo, esto solo funcionaría para la redirección, no directamente cargando una página.

Cuestiones relacionadas