There doesn't seem to be a single best practice.
(1) The standard config/routes.rb
file seems to suggest that the root page (or home/welcome page) should be handled by welcome#index
. If you were to be guided by that, then to generate the corresponding welcome#index
controller/action, you can use the following command:
rails generate controller Welcome index
Then, in config/routes.rb
, you can remove the GET route (get "welcome/index"
) automatically added by the generator, and place the root route root 'welcome#index'
(or root :to => 'welcome#index'
in Rails < 4
) at the top of the file, because it will probably be your most popular route and should be matched first.
Also remember to delete public/index.html
in Rails < 4
.
(2) The official Ruby on Rails routing guide uses PagesController
. It actually suggests pages#main
, though to me it makes more sense to go with pages#home
(because "homepage" is the ubiquitous term/concept). Additionally, this controller can handle other page-oriented actions such as pages#about
, pages#contact
, pages#terms
, pages#privacy
, etc.
rails generate controller Pages home
And in config/routes.rb
:
root 'pages#home'
(3) The Ruby on Rails Tutorial, goes with static_pages#home
and static_pages#help
, etc., though I don't like the idea of denoting this controller with "static". These pages will still likely have some dynamic aspects to them, particularly the homepage!
(4) Though it does not discuss how to handle a homepage, RailsCast #117 on Semi-Static Pages suggests yet another set of approaches to show-only resources.
I feel preference toward 1 and/or 2. With the "and" scenario, you could use welcome#index and pages#about, etc., whereas with the "or" scenario, you could use pages#home, pages#about, etc. If forced to choose, I would go with option 2 just because you end up with less code. And btw, 2 and 3 are pretty much the same, apart from the word "static".