Simple rails website design question

I want to make a simple website with rails, but I’m confused about how
to setup my controllers. Here’s what I want:

5 pages: Home, Products & Services, Press Center, White Papers & About
us

So, I’m confused about how to set this up. Should each page have it’s
own controller, e.g.:

home_controller, products_controller, press_controller,
white_papers_controller and about_us_controller

Is this a wise design decision?

I would like to use a layout “template” for all the pages. How then,
if I’m using independent controllers for each page do I share a
layout?

All the rails site examples I’ve found are kinda non-standard sites
with only 1 real page, like a shopping cart, so I’m not sure how to
structure my rails app for a site with many pages.

Can you cite any examples?

If your site is just HTML,

then stick with one controller.

or else split them like this

base_controller => [home, press, about us]
product_controller => [products]

On 9/13/07, eggie5 [email protected] wrote:

home_controller, products_controller, press_controller,
white_papers_controller and about_us_controller

Is this a wise design decision?

Can’t tell, with the information given.

The very “general” rule is to have a controller per model, so that’s a
good place to start. But it’s not necessary to agonize over the
structure of your controllers. Rather than trying to envision how the
whole thing will look like when it’s done, just implement a very small
part of it. Start with one controller. Then when you need to add
stuff, you have a choice: do I add an action to my current controller
or do I create a new controller? Well, make your best guess and see
how that goes. If it turns out to be problematic for whatever reason,
it’s easy to back up and take the other direction.

Also, don’t agonize over what the url’s look like. You can use routes
to map any kind of urls to any kind of controller structure.

I would like to use a layout “template” for all the pages. How then,
if I’m using independent controllers for each page do I share a
layout?

By default, all controllers will use the layout in
app/views/layouts/application.rhtml. So put your template there and
you’re done.

Bob S. wrote:

structure of your controllers. Rather than trying to envision how the

I would like to use a layout “template” for all the pages. How then,
if I’m using independent controllers for each page do I share a
layout?

By default, all controllers will use the layout in
app/views/layouts/application.rhtml. So put your template there and
you’re done.

I know this reply is quite far down in the thread but have you
considered using a Content Management System like Radiant? Based on the
scarce requirements in the OP’s email, it would appear that if most of
the pages are largely static (like a company website), Radiant would be
quite good!

Cheers,
Mohit.
9/14/2007 | 12:52 AM.

ahh, it looks like it does. Thanks. It seems like the single
controller with actions for each page will work fine for me.

One more thing:

What you said takes care of most of the urls:

www.domain_name.com/products
www.domain_name.com/whitepapers
www.domain_name.com/about

but I would like to access whitepapers like this:

www.domain_name.com/whitepapers/1
www.domain_name.com/whitepapers/3

www.domain_name.com/whitepapers/[WhitePaper.id]

How would I set this url structure up?

Well, all of the pages are pretty much standard, read an object from
the database then databind the page. SO that would fit into your one
controller idea with many actions for each page.

I would like my urls to look like this:

www.domain_name.com/products
www.domain_name.com/whitepapers
www.domain_name.com/about

etc…

Without any modifications to my routes.rb file the only way to access
my pages is to refrene the controller in the path like:

www.domain_name.com/base/products

How do I set up my urls to work like my list above?

On Sep 13, 12:13 am, Jamal S. [email protected]

It should already work. params[:id] should contain the 1 or the 3 in
the
examples you gave.

then in the controller you’d do something like

wp = WhitePaper.find_by_id(params[:id].to_i)

Thanks, I’ll check it out.

Add a line to routes.rb

map.connect(":action/:id", :controller => “base_controller”)