There are several options to handle this.
I believe that controllers are the glue between the view and models, and that controllers should do all data-retrieving. The helpers are only to help your view-code become more readable.
So, in that light, there are a few options.
Classic Rails approach
We have a large app, where there are a few shared blocks, not related to the current page, but to the current user, where he can see his items, actions, and quickly jump around. This stuff all comes from the database.
We retrieve the data using before_filter
methods. Those methods are defined in the ApplicationController
. We keep our ApplicationController
small by mixing that code (shared behaviour) in.
In our application
layout we render the different partials for the data collected in those before filters. Most of those blocks are fixed and always visible.
Cells
I have not used it myself, but a very clean solution, is to use cells. Cells are actually a kind of blocks, with their own controller and views, that you can place on your page. This sounds very interesting, and definitely interesting if you have a portal-kind of site with portlets (does anybody know what I mean with that? I feel so old now ;)).
Switch to client MVC
If you are switching to a single-page webapplication, like Gmail, it could also be a good time to switch to using a javascript MVC framework. Your page could then be made up using different areas, each with their own model and view (template), which link to your rails controller.
There are a ton of libraries at the moment, everybody seems to be using backbone these days, but if you take this route, I would recommend to check out spine.js: it has an awesome rails integration and dead easy to get started with.
Hope this helps.