Newbie question on rails development

Hello,

Maybe someone can point me in the right direction here:

Say I’m developing a site where the main page is a sort of portal. On
that page I’d like to display content from various controllers in my
Rails application.

For example: The top right of the screen would have a div to login
utilizing my Session controller. The left side of the screen would have
a div displaying content from an RSS feed controller. There would be a
div containing page specific navigation tabs coming from a Navigation
controller… you get the idea…

So for example I’m thinking of having a Home or Welcome controller that
displays views/home/index.html.erb. This inherits a layout from
Application that gives me the top banner and footer for the site. So in
the controller I’ll put some logic to decide which navigation div to
display and the login div based on whether the user is logged in.

So I’m in my Home controller. I’m working with def index utilizing
views/home/index.html.erb and i want to display content from multiple
different controllers.

I’ve found lots of different ideas on google, but nothing rock solid.
I’m on rails 2.1.

Any direction would be much appreciated.

I personally tend to think that the Model View Controller (MVC)
architecture provided by frameworks such as Rails is often
misunderstood. It’s very easy to begin associating the three layers in a
one-to-one-to-one relationship. But, that’s not really in the spirit of
MVC. MVC is all about separating responsibilities. Models being
responsible for persisting, calculating, and otherwise manipulating
data, views responsible for presenting data to the users, and
controllers to handling the “wiring” between the model and view.

Nothing in MVC says anything about these being one-to-one. I place part
of the blame for this on overuse of scaffolding. I’m not saying there’s
anything wrong with scaffolding, I just think it tends to promote this
limited view of MVC.

That being said:

I would recommend deciding what pieces of view logic could be shared
between your portal page and other views that may contain the same view
code. Take that shared code and create a folder somewhere in your
project structure to store partials contain these shared views (maybe
app/views/shared).

Then wherever you want to display that view use something like render
:partial => “shared/_my_view”

Just remember that your controller (say welcome_controller.rb) is
responsible for loading any data used in all these partials. For that I
would recommend adding before_filters to call a method to get all
required data from your model.

It might even be worth while to look into a “Presenter” pattern
architecture for your welcome page. I’ll leave that as an exercise for
you to research.

Leif Elan wrote:

Hello,

Maybe someone can point me in the right direction here:

Say I’m developing a site where the main page is a sort of portal. On
that page I’d like to display content from various controllers in my
Rails application.

For example: The top right of the screen would have a div to login
utilizing my Session controller. The left side of the screen would have
a div displaying content from an RSS feed controller. There would be a
div containing page specific navigation tabs coming from a Navigation
controller… you get the idea…

So for example I’m thinking of having a Home or Welcome controller that
displays views/home/index.html.erb. This inherits a layout from
Application that gives me the top banner and footer for the site. So in
the controller I’ll put some logic to decide which navigation div to
display and the login div based on whether the user is logged in.

So I’m in my Home controller. I’m working with def index utilizing
views/home/index.html.erb and i want to display content from multiple
different controllers.

I’ve found lots of different ideas on google, but nothing rock solid.
I’m on rails 2.1.

Any direction would be much appreciated.

:partial => “shared/_my_view”
Correction: This should be “shared/my_view” The partial filename starts
with the underscore, but you don’t include that when rendering it.