# Showing 404 page from controller in Rails 3

**URL:** <https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440>\
**Category:** Rails\
**Created:** [June 1, 2010, 4:32am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440 "2010-06-01T04:32:56Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 1, 2010, 4:32am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/1 "2010-06-01T04:32:56Z")

</div>

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

–  
[http://twitter.com/scrum8](http://twitter.com/scrum8)

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 1, 2010, 4:55am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/2 "2010-06-01T04:55:47Z")

</div>

Quoting Joshua P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

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

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 1, 2010, 1:15pm UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/3 "2010-06-01T13:15:38Z")

</div>

Do you mean rescuing or raising ActiveRecord::NotFound?

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 1, 2010, 4:03pm UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/4 "2010-06-01T16:03:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 3, 2010, 9:51am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/5 "2010-06-03T09:51:57Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 3, 2010, 10:45am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/6 "2010-06-03T10:45:14Z")

</div>

Try “raise ActiveRecord::NotFound” or “render ‘/404.html’”.

Jeffrey

Quoting L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 1, 2010, 4:04pm UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/7 "2010-06-01T16:04:17Z")

</div>

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

HTH,  
Jeffrey

Quoting M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 4, 2010, 2:45am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/8 "2010-06-04T02:45:20Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [June 6, 2010, 2:45am UTC](https://www.ruby-forum.com/t/showing-404-page-from-controller-in-rails-3/189440/9 "2010-06-06T02:45:19Z")

</div>

if   
render ‘/404.html’  
return  
end

Quoting L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
