Multiple Controllers in a page?

Hi all,

I recently posted this on the ruby group instead of here :frowning:

but here is what I am attempting to do.

I am building a site, and I wish to populate the navigation dynamically
from a MySQL db table, and the page content from a different table.

The idea being I can have the navigation on every page, and use
different controllers to select different content depending on what is

The Event page content comes from a page table where id = someValue
but I also need some events (days out etc, presentations), they come
from the events table.

I am confused how to put all the pieces together in one page.

Could anyone point me in the right direction?

At the moment I have a Site Controller, NavItem controller/model (with
a partial _nav_item), Event controller/model and Page controller/model,
all of which have the functions for list/show etc inside their
respective controller, except the Site.

Since I posted I have created a partial for my nav_items, but how do I
then render my partial in another controller? I can’t understand how I
could just use
<%= render :partial => “nav_item”, object => @nav_item %>
and rails know what “nav_item” is.

Should I be looking at using a template?

If someone could provide some clarification on what I am doing wrong,
or if I am trying to structure it wrong, that would be great :slight_smile:


  1. About the Navigation:

add a before_filter to your app controller that calls a method to
build the data for your sidebar

before_filter :build_sidebar

def build_sidebar
if controller_name = “page”
do something
elseif controller_name = “someothercontroller”
do somethingelse

and then render your navigation partial in your layout
<%= reder :partial => :navigation %>
and in your _navigation.rhtml you build your naviation based on the
variables/data populated in the beforefilter.

2’) about the “different controllers in one page”
i think you are thinking the wrong way. you have a controller for each
Model, and want to put those controllers together. You dont need 1
controller for each model.
Instead, you should have a controller for each section/logic of your
site, and in each of these controllers you access various Models to
create your views etc.