Showing 404 page from controller in Rails 3

Hi all,

I want to be able to display 404 page from a controller when a record in the database can not be found. I am using Rails 3 at the moment. I tried to find how to do this on guides.rails.info with no luck. Can anybody recommend the best approach to do this?

Thanks heaps for your help and assistance. I really appreciate it.

Kind regards, Joshua

Quoting Joshua Partogi <joshua.partogi@gmail.com>:

Hi all,

I want to be able to display 404 page from a controller when a record in the database can not be found. I am using Rails 3 at the moment. I tried to find how to do this on guides.rails.info with no luck. Can anybody recommend the best approach to do this?

Have you tried raising ActiveRecord::NotFound in the controller? Or just let the model raise it.

Jeffrey

P.S. not actually tried this in Rails 3, this works for me in Rails 1.x and 2.x.

Do you mean rescuing or raising ActiveRecord::NotFound?

Hi Jeff and Mirko,

Thank you very much for the response.

By default active_record will raise ActiveRecord::NotFound exception when a record can not be found in the database. And when this occurs, it will display the 404 page from the public folder. Unfortunately this hasn't been working for me in production. After observing the problems, it seems it only occurs when running Rails 3 with passenger. I have tried the same test case but running Rails on thin and everything works as it should be.

Does anybody have this kind of experience like this? Thanks very much in advance for sharing.

Kind regards, Joshua

Raising. In Rails 1.x and 2.x, ActiveRecord:NotFound exception is caught by Rails and it displays the 404 page.

HTH,   Jeffrey

Quoting Mirko <batamire@gmail.com>:

What does one do when he's not using ActiveRecord? (Sequel here.)

Try "raise ActiveRecord::NotFound" or "render '/404.html'".

Jeffrey

Quoting Legato <sireleo@gmail.com>:

I can't raise ActiveRecord::NotFound as that's not the ORM I am using, so it is not even require'd in my project. Rendering 404.html should work, but how do I halt the action additionally? raising an Exception will prevent the rest of the action from executing, but rendering won't afaik.

if <condition>   render '/404.html'   return end

Quoting Legato <sireleo@gmail.com>: