# Running the same model search in multiple controllers

**URL:** <https://www.ruby-forum.com/t/running-the-same-model-search-in-multiple-controllers/112188>\
**Category:** Rails\
**Created:** [August 16, 2007, 5:32am UTC](https://www.ruby-forum.com/t/running-the-same-model-search-in-multiple-controllers/112188 "2007-08-16T05:32:56Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![blaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/51bf81/32.png) [@blaine](https://www.ruby-forum.com/u/blaine)\
**Post date:** [August 16, 2007, 5:32am UTC](https://www.ruby-forum.com/t/running-the-same-model-search-in-multiple-controllers/112188/1 "2007-08-16T05:32:56Z")

</div>

So I have a layout (application.rhtml) that contains a list of  
categories that are stored within the database. To get retrieve the  
list I overwrite the initialize method within the application  
controller (application.rb) as such:

def initialize  
@categories = Category.find(:all, :order =\> :position)  
end

Is this the best way I should be doing this? I don’t want to have  
this code in my layout breaking MVC idioms, but is there a more  
preferred way in best practice then by doing it this way?

Thanks,

Blaine

---

<div class="post-metadata">

**Author:** ![blaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/51bf81/32.png) [@blaine](https://www.ruby-forum.com/u/blaine)\
**Post date:** [August 16, 2007, 7:04am UTC](https://www.ruby-forum.com/t/running-the-same-model-search-in-multiple-controllers/112188/2 "2007-08-16T07:04:06Z")

</div>

Personally I’d be writing a before filter to call a method in my  
application.rb

Cam

---

<div class="post-metadata">

**Author:** ![blaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/51bf81/32.png) [@blaine](https://www.ruby-forum.com/u/blaine)\
**Post date:** [August 16, 2007, 7:08am UTC](https://www.ruby-forum.com/t/running-the-same-model-search-in-multiple-controllers/112188/3 "2007-08-16T07:08:07Z")

</div>

On Aug 16, 5:31 am, blaine [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> this code in my layout breaking MVC idioms, but is there a more  
> preferred way in best practice then by doing it this way?

If I understand you correctly, you should be using a before filter:  
[http://api.rubyonrails.com/classes/ActionController/Filters/ClassMethods.html](http://api.rubyonrails.com/classes/ActionController/Filters/ClassMethods.html)

You may want to cache the list of categories until they change:  
[http://ap.rubyonrails.com/classes/ActionController/Caching/Fragments.html](http://ap.rubyonrails.com/classes/ActionController/Caching/Fragments.html)

---

<div class="post-metadata">

**Author:** ![blaine](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/51bf81/32.png) [@blaine](https://www.ruby-forum.com/u/blaine)\
**Post date:** [August 16, 2007, 7:14am UTC](https://www.ruby-forum.com/t/running-the-same-model-search-in-multiple-controllers/112188/4 "2007-08-16T07:14:08Z")

</div>

Excellent - I thought about doing it with a before\_filter, but again  
wasn’t sure. I’ve adjusted the code to use a before\_filter instead  
and it’s all working great, thanks a lot.

Blaine
