web-dev-qa-db-fra.com

Rails console: impossible de charger automatiquement la constante

J'ai un modèle Customer_ratings qui permet aux utilisateurs de laisser des commentaires les uns sur les autres. L'application Web fonctionne correctement et les commentaires sont collectés, stockés et affichés.

Je voulais entrer et supprimer certains commentaires via la console Rails, mais lorsque j'entre Customer_rating.all, J'obtiens l'erreur suivante:

LoadError: Unable to autoload constant Customer_rating, expected /Users/myapps/app/models/customer_rating.rb to define it

De même, si j'entre Customer_rating [0], j'obtiens:

RuntimeError: Circular dependency detected while autoloading constant Customer_rating

Je n'ai pas ce problème lors de l'accès à d'autres tables via ma console.

Qu'est-ce qui pourrait être à l'origine du problème et pourquoi cette erreur n'empêcherait-elle pas Customer_ratings de fonctionner correctement via l'application Web?

22
dmt2989

Cela ressemble à un cas de convention de dénomination foirée.

Selon la convention de nommage Rails, noms de fichiers doit être dans snake_case et noms de classe dans CamelCase. Dans votre scénario, le nom de fichier doit être customer_rating.rb et le nom de la classe doivent être CustomerRating.

Après avoir apporté ces modifications, utilisez CustomerRating.all (comme le nom de classe mis à jour est CustomerRating) pour récupérer toutes les évaluations des clients. Ne pas utiliserCustomer_rating.all.

41
Kirti Thorat

Je voudrais également ajouter un scénario de ce problème que j'ai trouvé pour référence future.

J'exécute Rails 4.0 et j'ai eu le même problème mais ce qui s'est passé, c'est que j'avais un modèle nommé Student dans student.rb qui était contenu dans un dossier appelé Student. Je ne m'en étais pas rendu compte au début, mais le nom du dossier était le problème. La modification du nom du dossier par un nom autre que le nom du modèle a résolu le problème.

7
Ryan Bartley