50

I know how to set the routes root of my rails app to a controller and an action.

But how to add an id?

/pages/show/1 should be the root.

How do I set this?

potashin
  • 44,205
  • 11
  • 83
  • 107
Joern Akkermann
  • 3,542
  • 8
  • 33
  • 41

6 Answers6

80

Had this same problem and this worked for me:

root :to => "pages#show", :id => '1'
Matt D.
  • 896
  • 6
  • 5
32

As of Rails 4.0, you can declare the root route like this:

root 'controller#action'
Dennis
  • 56,821
  • 26
  • 143
  • 139
Brian Petro
  • 1,577
  • 16
  • 32
6

I'm using Rails 5.1 to point the home page to a specific blog. In config/routes.rb I have ...

root 'blogs#show', {id: 1}

This will point the root route to /blogs/1

I'm doing this on a blog site I'm building. The first blog will be the main site blog as well as the homepage.

Cheers

SMHauck
  • 81
  • 1
  • 8
4

Matthew's solution works, but I think it is more readable to fetch the object. For example, let's say you want to root to the Page#show action for the page with the name "landing". This is a bit more readable:

root :to => "pages#show", :id => Page.find_by_name("landing").id

From a performance perspective, this solution is worse because it requires an additional database query, but this solution is more readable if performance is not a high priority.

Powers
  • 18,150
  • 10
  • 103
  • 108
3

Try:

 match 'pages/show/:id' => 'pages#show', :as => :root

In Rails console. rake routes | grep root, should show something like:

root     /pages/show/:id(.:format)      {:controller=>"pages", :action=>"show"}

Hope that helps.

Christian Fazzini
  • 19,613
  • 21
  • 110
  • 215
2

Use Rails 5.1 Add this to the config/routes.rb

root 'pages#show', {id: 1}
askrynnikov
  • 657
  • 10
  • 15