Schienen 3.2 undefinierte Methode `Key? 'Für Null: Nilclass
-
12-11-2019 - |
Frage
Aus irgendeinem Grund habe ich angefangen, diesen Fehler zu erhalten, nachdem ich auf Rails 3.2 wechselst.Ich denke, es hat etwas mit ACL9-Plugin zu tun, das ich versucht habe, installiert zu werden, aber nichts änderte sich.
Ich habe die Plugins in lib / plugins verschoben und den Initialisierer in Konfigurations- / Initialisierer hinzugefügt, jedoch erneut, denselben Fehler.
Ich suchte nach Lösung bei ACL9 Repo auf Github, konnte aber nichts finden.Vielleicht ist es doch nicht ACL9.
Ich habe Papierclip, ACL9, AuthLogic installiert. generasacodicetagpre.
edit (gelöst): Es dauerte eine Weile, um herauszufinden, und ich bin immer noch nicht ganz sicher, was passiert ist.Ich denke, es hat mit ACL9-Support von Rails 3.1+
Lösung
Ich bin ein Neuling, um ror zu ror und er habe den gleichen Fehler beim Gehen von ror "Erste Anleitung".
Das klingt dumm, aber andere könnten den gleichen Fehler machen, wie ich bin, also poste, was ich in Ror aus Newbies Augen bemerkte, generasacodicetagpre.
Hinweis ": Anwesenheit", sollte es ": Anwesenheit" sein.Nun wirft die Schiene einen Syntaxfehler generasacodicetagpre.
Wenn Sie jedoch Ihren Browser "aktualisieren", versteckt es den Syntaxfehler, stattdessen gibt es generasacodicetagpre.
Es scheint, dass Schienen zwischengespeichert sind, ist der Täter.:)
Andere Tipps
Dies ist möglicherweise nicht Ihr Problem, da er sich anhört, als hätten Sie bereits einen funktionierenden Code, mit dem Sie beginnen, aber für die zukünftige Referenz für andere, bin ich aufgrund eines einfachen Tippfehlers in meinem Modellcode, wie folgt:
generasacodicetagpre.was hätte sein sollen: generasacodicetagpre.
Beachten Sie das "Maximum" vs. ": Maximum" - Dies führte zu dem genauen Null-Fehler und ging weg, als ich diesen Tippfehler behoben habe.
Nicht sicher, ob dies derselbe Fehler ist, aber ich hatte ein ähnliches Problem.Bei einer ersten Ladung eines Buggy-Modells antwortet
oder generasacodicetagpre.
I agree with bmoeskau that you should check your model code for bugs. To my surprise, models apparently sometimes get loaded during the routing phase. I discovered:
- The code that causes the problem, in my case, is in the model, not in the controller where I would expect it.
- The
undefined method `key?' for nil:NilClass
error often only occurs after the first time I access the page.
As far as I can tell, what happens is
- Suppose we have a scaffold for Examples, with some bad code in
app/models/example.rb
- A request is made for
/examples
- The routing part of Rails matches that to
app/controllers/examples_controller.rb
but it first loadsapp/models/example.rb
. I don't know why it loads the model, but the effect is, I conjecture: The error in the model stops short a part of the routing code, corrupting its construction of a cache of routes. - At this point, if I'm lucky the error will be reported back to me in the browser. Sometimes, however, I simply get a message saying
No route matches [GET] "/examples"
(To be fair to Rails, this added complication seems to be the fault of not usingresources :examples
to make the route. The following happens regardless). - A second request is made for
/examples
- Conjecture: This time the Rails routing code tries to use its cached reference to
app/controllers/examples_controller.rb
but the routes cache is corrupt (a variable isnil
) because the code that sets never finished running.
This last item is most annoying because the problem that caused it (the bad code in the model) isn't even being run.