web-dev-qa-db-fra.com

ActionController :: RoutingError: constante non initialisée MicropostsController

Update : Cela était dû à un nom de fichier mal orthographié

correct:
~/sample_app/app/controllers/microposts_controller.rb

incorrect:
~/sample_app/app/controllers/microposts_contoller.rb


C’est ma première contribution ici, les commentaires sur l’amélioration de cette annonce ou de futures publications sont appréciés :)

Didacticiel Ruby on Rails: Apprendre le développement Web avec Rails 4

En travaillant dans le chapitre 10.3 , je me suis retrouvé coincé. À la fin, un nom de fichier mal orthographié m'avait chassé des fantômes pendant quelques jours.

$ 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
16
8legged

Cela était dû à un nom de fichier mal orthographié ~/sample_app/app/controllers/microposts_controller.rb (c'était microposts_contoller.rb)

21
8legged

Cela peut également se produire si une route imbriquée mappe un répertoire imbriqué:

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

Vous devez placer votre fichier images_controller.rb avec la structure suivante:

-controllers
 |-brokers
   |-images_controller.rb

Remarquez dans la structure de répertoire images_controller.rb est le descendant direct des courtiers.

Donc, pour permettre à Rails de trouver votre classe, ne créez pas de sous-répertoire properties à l'intérieur de brokers mappant la structure de la route, il doit être un descendant direct des courtiers.

3
juliangonzalez

Dans routes.rb j'ai tapé resource au lieu de resources

2
thedanotto

Juste pour aider si quelqu'un est coincé avec un problème similaire:

J'ai mal orthographié le contrôleur, si vous tapez sans le s dans les produits c'était faux:

Faux:

get '/my_products', to: 'product#my_products'

Droite:

get '/my_products', to: 'products#my_products'
2
Ahmed Elkoussy

J'avais mal inclus le ci-dessous dans mon application_controller.rb

Correct: include ActionController::MimeResponds

Incorrect: include ActionController::MimeResponse

# /controllers/api/v1/application_controller.rb

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

dans mes itinéraires: j'avais "/" au lieu de "#" pour tout le "get", changez donc ceci en "#" get 'all' => 'vitrine # all_items'

get 'categorical' => 'vitrine # items_by_category'

get 'branding' => 'vitrine # items_by_brand'

cela a corrigé toutes mes erreurs.

0
Wei Liu