Normalement, Ruby donnera le nom de la classe que la méthode manquante est de. Par exemple, si je suis en IRB et que je crée, instancie et puis appelle une méthode manquante, Ruby me donnera plus de détails que Rails.
class Widget
def initialize
@widget = 42
end
end
J'instancier la classe:
test = Widget.new
Je reviens l'ID du nouveau fait l'objet et le nom de classe:
#<Widget:0x007f850982f560 @widget=42>
Et si je l'appelle une méthode qui est ne fait pas partie du Widget:
test.no_method
je reçois un message agréable de RIR:
NoMethodError: undefined method `no_method' for #<Widget:0x007f850982f560 @widget=42>
Mais revenons à Rails ... Je ne suis pas sûr précisément pourquoi, peut-être à cause de la façon dont le Rails MVC est architecturé, les noms réels des classes ont été laissées out, et seuls les ID d'objet sont donnés dans le message d'erreur.
Si j'ai fait une application de film, et je suis dans l'application/vues/modèle/show.html.erb et j'appelle une méthode qui n'existe pas comme:
<% no_method %>
Mon application sera éclatez, avec le message suivant:
undefined local variable or method `no_method' for #<#<Class:0x007fb9a51553b8>:0x007fb9a4951c48>
Je parierais un pari que le premier ID est lié à ID modèle de l'objet et le second est Voir l'ID de l'objet, mais je suis tout à fait planer le doute sur cela. Mais c'est l'information ci-dessus ce message qui vous donnera le chemin du fichier que l'erreur vient, dans mon cas, juste au-dessus du message d'erreur de méthode non définie est:
NoMethodError in Movies#index
En tout cas, vous pouvez également faire une recherche dans vos modèles de vue pour cette méthode de rupture et vous devriez le trouver. J'espère que cela pourra aider. Supposons que nous écrivions ce qui suit:
Montrez-nous le code qui est à l'origine de cette erreur. –
Ceci est généralement généré à partir d'une classe créée dynamiquement en utilisant 'Class.new', et sans lier la classe à une constante (nommer la classe). –