ActionController:: RoutingError: неинициализированная константа MicropostsController

Обновить. Это произошло из-за неправильного имени файла

правильный:
~/sample_app/app/controllers/microposts_controller.rb

неправильный:
~/sample_app/app/controllers/microposts_contoller.rb


Это мой первый вклад здесь, приветствуется обратная связь по улучшению этой или будущей публикации:)

Учебник Ruby on Rails: Изучите веб-разработку с помощью Rails 4

Во время работы над главой 10.3 я застрял. В конце концов, имя файла с орфографической ошибкой застало меня преследовать призраков в течение нескольких дней.

$ rspec spec/requests/authentication_pages_spec.rb
No DRb server is running. Running in local process instead ...
...FF................

Failures: 

1) Authentication authorization for non-signed-in users in the Microposts controller submitting to the create action 
Failure/Error: before { post microposts_path } 
ActionController::RoutingError: 
uninitialized constant MicropostsController 
# ./spec/requests/authentication_pages_spec.rb:93:in `block (6 levels) in ' 

2) Authentication authorization for non-signed-in users in the Microposts controller submitting to the destroy action 
Failure/Error: before { delete micropost_path(FactoryGirl.create(:micropost)) } 
ActionController::RoutingError: 
uninitialized constant MicropostsController 
# ./spec/requests/authentication_pages_spec.rb:98:in `block (6 levels) in ' 

Finished in 0.92253 seconds 
21 examples, 2 failures 

Failed examples: 

rspec ./spec/requests/authentication_pages_spec.rb:94 # Authentication authorization for non-signed-in users in the Microposts controller submitting to the create action 
rspec ./spec/requests/authentication_pages_spec.rb:99 # Authentication authorization for non-signed-in users in the Microposts controller submitting to the destroy action

Ответ 1

Это произошло из-за неправильного имени файла ~/sample_app/app/controllerlers/microposts_controller.rb(было microposts_contoller.rb)

Ответ 2

Это также может произойти, если у вас есть вложенный маршрут, сопоставляющий вложенный каталог:

Started POST "/brokers/properties/5/images/upload" for ...

ActionController::RoutingError (uninitialized constant Brokers::ImagesController):

namespace :brokers do
  resources :properties, only: [] do
    collection do
      post 'upload'
    end
    member do
      resources :images, only: [] do
        collection do
          post 'upload'
        end
      end
    end
  end
end

Вы должны поместить ваш файл images_controller.rb в следующую структуру:

-controllers
 |-brokers
   |-images_controller.rb

Обратите внимание, что структура каталогов images_controller.rb является прямым потомком брокеров.

Итак, чтобы Rails обнаружил, что ваш класс не создает подкаталог properties внутри brokers, отображающий структуру маршрута, он должен быть прямым потомком брокеров

Ответ 3

В routes.rb я набрал resource вместо resources

Ответ 4

в моих маршрутах: у меня было "/" вместо "#" для всех "get", поэтому измените это на "#", get 'all' = > 'storefront # all_items'

получить 'категориальный' = > 'storefront # items_by_category'

получить 'брендинг' = > 'storefront # items_by_brand'

который зафиксировал все мои ошибки.

Ответ 5

Я неправильно включил ниже в application_controller.rb

Правильно: include ActionController::MimeResponds

Неверно: include ActionController::MimeResponse

# /controllers/api/v1/application_controller.rb

module Api
  module V1
    class ApplicationController < ActionController::API
      include ActionController::MimeResponds
    end
  end
end