views:

210

answers:

2

Hi,

I've got a requirement to specify a named route in a Ruby on Rails project that returns the public/404.html page along with the 404 server response code.

Leaving it blank is not an option, please don't question why, it just is :) It absolutely must be a named route, or a map.connect entry would do.

Something like this would be great:

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

Anyone have any idea what's the easiest way to do something like this. I could create a controller method which renders the 404.html file but thought there might be an existing cleaner way to do this. Looking forward to any responses - thanks,

Eliot

+2  A: 

Why dont you do this in Apache/nginx where you use mod_rewrite (or however nginx does rewrites) to link to a non-existent page or instead send a 410 (Gone, no longer exists) Flag?

Anyway, if you want the rails app to do this, I think the way is as you suggested, create a named route to an action that does a render(:file => "#{RAILS_ROOT}/public/404.html", :status => 404)

Omar Qureshi
A: 

In your routes.rb:

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

In FoobarController:

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

If you need to render the same 404 file as a normal 404, you can do that with render :file.

See ActionController::Base documentation for examples.

Luke Francl