2013-08-20 6 views
1

Je suis face à l'erreur suivante:Rails actifs Nom Erreur enregistrement

NameError at 
uninitialized constant XController::Sheep 

à cette ligne

server = Sheep.find_by_id(id) 

Voici ma configuration:

Sous models/sheep.rb

class Sheep < ActiveRecord::Base 
    has_many :kids 
end 

Sous models/kid.rb

class Kid < ActiveRecord::Base 
    belongs_to :sheep # I tried adding , :class_name => 'Sheep' didn't do anything 
end 

Sous config/initializers/inflections.rb

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.uncountable 'sheep' 
end 

Le nom de la table est en fait sheep j'ai vérifié

Que dois-je vérifier?

EDIT: Dans le contrôleur controllers/farm.rb je fais deux appels:

@kid = Kid.find_by_id params[:id] 
@sheep = Sheep.find_by_id(id) # works only when adding :: as in the answer 
+0

Dans quel fichier appelez-vous 'Sheep.find_by_id (id)'? Pouvez-vous essayer d'utiliser ':: Sheep.find_by_id (id)' à la place? – MrYoshiji

+0

cela a fonctionné! mais comment se fait-il que je puisse référencer d'autres modèles avec juste les paramètres de Kid.find_by_name [: name] sans avoir besoin de ::? (même contrôleur aussi) – nevermind

+0

Je ne sais pas, vous n'avez pas répondu à la première question donc je ne peux pas vous aider ... – MrYoshiji

Répondre

1

Vous pouvez essayer d'accéder à ce nom de modèle avec double deux points:

server = Sheep.find_by_id(id) 
# become 
server = ::Sheep.find_by_id(id) 
     ^^ 

Ensuite, il devrait fonctionner.

Je n'ai pas encore assez d'infos pour dire pourquoi ça ne marche pas sans les deux-points, mais mon intuition me dit que XController::Sheep suggère que vous avez un problème dans les noms de votre contrôleur.

+0

Le nom du contrôleur est ferme, rien de spécial – nevermind