2009-04-23 10 views

risposta

35

Questo sembra buona ...

# 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

[Questa risposta ] (http://stackoverflow.com/questions/2385799/how-to-redirect-to-a-404-in-rails#answer-4983354) su un'altra domanda mi sembra più potente. Bonus: include il codice di prova :-) – webmat

+2

Usa Rails.root.to_s invece di RAILS_ROOT nelle versioni successive dei binari – deb

+1

@deb che differenza fa? L'interpolazione delle stringhe chiamerà implicitamente "to_s". –

6

Reference:

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

Questo è un po 'più bello ... –

6

Nel ApplicationController definire un metodo come:

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

È inoltre possibile

raise ActiveRecord::RecordNotFound

eccezione.

+1

per esempio usando '.find_by!' O '.first!' –

23

modo seguente è stata la migliore per me:

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

o semplicemente

raise ActionController::RoutingError, 'Not Found' 

O ci sono altre soluzioni: How to redirect to a 404 in Rails?

+2

Lo stesso ma più semplice: 'solleva ActionController :: RoutingError,' Not Found'' –

0

Se si voleva emanare un codice di stato su un reindirizzamento (ad esempio 302), è possibile inserire questo in routes.rb:
get "/somewhere", to: redirect("/somewhere_else", status: 302).
Tuttavia, ciò funzionerebbe solo per il reindirizzamento, non per il caricamento diretto di una pagina.

Problemi correlati