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>: