Routing error - uninitialized constant

后端 未结 5 1728
-上瘾入骨i
-上瘾入骨i 2020-12-28 13:28

I could not fix this in Rails 3.2.12, maybe I am missing something.

config/routes.rb

get \"home/index\"
root :to => \"home#index\         


        
相关标签:
5条回答
  • 2020-12-28 13:40

    Though this question has been answered, I found another case where I was getting this error and wanted to document it here for posterity.

    If you have two similar routes defined in your routes.rb file without the corresponding controllers you will get the uninitialized constant error.

    Steps to reproduce:

    rails generate scaffold foobar name:string
    bundle exec rake db:migrate
    

    add resources :foobars to routes.rb to a new scope (note: the foobars resource was already automatically added to the top of your routes.rb during scaffold generation) like this:

      resources :foobars
    
      ########################################
      # SUPER
      ########################################
    
      constraints host: ENV['SUPER_HOST'] do
        scope module: :super do
          resources :foobars
          get '/' => 'super#index'
    
        end
      end
    

    Now, move /app/views/foobars to /app/views/super/foobars and, move /app/controllers/foobars_controller.rb to /app/controllers/super/foobars_controller.rb Make sure foobars_controller.rb is in the Super module:

    class Super::FoobarsController < ApplicationController
    

    Now go to your.dev.server/foobars/ You should get this error: Routing Error uninitialized constant FoobarsController

    Now, remove resources :foobars from beginning of routes.rb It should work now!

    It took me awhile to figure out why I was getting this error, and I didn't realize that generating the scaffold adds an entry in routes.rb

    0 讨论(0)
  • 2020-12-28 13:45

    make sure you've created your model for the controller in question.

    0 讨论(0)
  • 2020-12-28 13:55

    While it doesn't answer your specific question, I received the failure with the following in my routes.rb

    resources :republishes  do
        post '/attempt_all', :to => 'republishes/#attempt_all' . . .
    

    which I changed to

    resources :republishes  do
        post '/attempt_all', :to => 'republishes#attempt_all' . . .
    

    Removing the slash fixed my issue.

    0 讨论(0)
  • 2020-12-28 13:56

    In my case, Since I'd scaffold the module, it was already had initiated routes for the controller and I was defining it twice. So by removing one of the duplicate resource routes resolved my issue.

    0 讨论(0)
  • 2020-12-28 14:05

    Rails requires the file name to match the class name. Therefore you should rename app/controllers/authentication_controller.rb to app/controllers/authentications_controller.rb.

    0 讨论(0)
提交回复
热议问题