alexandersix
alexandersix

Reputation: 55

Sometimes getting an "Invalid Route Name" Error in Rails

I am getting the following error only on occasion when I attempt to load up my Rails app in localhost.

Invalid route name, already in use: 'root' You may have defined two routes with the same name using the :as option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with resources as explained here: http://guides.rubyonrails.org/routing.html#restricting-the-routes-created

For some reason, it only happens every now and again, and generally goes away after I refresh the page once. The file it is calling into question has this as the code (line causing the error indicated):

Rails.application.routes.draw do
  get 'welcome/index'
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".

# You can have the root of your site routed with "root"

  Rails.application.routes do
    resources :articles
    root 'welcome#index' #-->This is the line that causes the error
  end

  resources :articles do
    resources :comments
  end
end

I am really new to Rails, and I'm not sure what is causing the problem or if would even be a problem if I were to actually host this beginner project on the web. Also, if it helps, I am running Ruby 2.2.2 and Rails 4.2.1.

Thank you in advance for the help!

Upvotes: 2

Views: 649

Answers (3)

Cyzanfar
Cyzanfar

Reputation: 7146

You have two routes pointing to the same page index, get rid of your get route

get 'welcome/index'

Also your root route is nested that should be moved outside since the root route is the root of your entire app and not a specific resource

Upvotes: 0

Luis Menjivar
Luis Menjivar

Reputation: 777

You have (Rails.application.routes) nested inside (Rails.application.routes.draw). Run rake routes and you will see that you have resources for articles twice. Furthermore, you have root 'welcome#index' nested inside and that is why you are getting the error. Your routes should look like this

Rails.application.routes.draw do
  get 'welcome/index' => 'welcome#index'
  root 'welcome#index' 
  resources :articles do
    resources :comments
  end
end

Note that the route of your application meaning(/) and (/welcome/index) both point to the welcome controller index action. You don't really need get 'welcome/index' => 'welcome#index' and you can delete that line and use root when ever you need the index action from the welcome controller.

Upvotes: 1

William Dembinski
William Dembinski

Reputation: 194

Try using the "Full" syntax.

root :to=> "some#action"

Upvotes: 0

Related Questions