before_action im Renderfehler des Benutzercontrollers: NoMethodError in Users # show

8

Ich folge Michael Hartls Rails Guide (zu Kapitel 9). Wenn ich versuche, auf die Seite zuzugreifen, die dem Profil des Benutzers entspricht, zeigt der Browser folgende Fehlermeldung an:

%Vor%

Hier ist meine users_controller.rb

%Vor%

Die Seite wird ohne die Zeile geladen:

%Vor%

Aber mit seiner Einbeziehung gehen Dinge schief und ich kann nicht herausfinden warum.

Hier ist auch die routes.rb

%Vor%

Jede Hilfe ist willkommen!

    
i_trope 23.07.2013, 10:22
quelle

4 Antworten

17

Anstelle von Before Action in Users_controller versuchen Sie es vor dem Filter Ihr Code sieht also so aus:

%Vor%

Ich hatte genau den gleichen Fehler!

    
Hurman Gul 14.09.2013, 15:42
quelle
17

Wenn Hurmans Antwort tatsächlich Ihr Problem gelöst hat, liegt der Grund daran, dass Sie eine ältere Version (d. h. & lt; 4.0.0) von Schienen betreiben. before_filter wurde in dieser Version umbenannt in before_action ( Ссылка ), weitere Informationen in Rails 4: before_filter vs. before_action

    
frbl 23.10.2013 11:46
quelle
1

Neben @Hurman Guls Antwort werde ich Ihnen hoffentlich einige Details darüber geben, warum Sie dieses Problem sehen ...

Ihr Controller führt eine Aktion für eine nicht vorhandene Variable aus

Der Fehler liegt darin, dass eine Ihrer Aktionen versucht, eine Aktion für eine Variable auszuführen, die entweder nicht festgelegt ist oder keinen Inhalt hat ( nil ). Der Fehler bedeutet im Grunde, dass Sie versuchen, den ".name" -Teil einer Variablen aufzurufen, wo sie nicht existiert

%Vor%

Dies bedeutet im Grunde, dass Sie versuchen, @ user.name zu laden, wenn @user wahrscheinlich nicht existiert. Die Art, wie ich das Problem beheben möchte, besteht darin, zunächst eine gewisse Logik auf Ihre Ansicht anzuwenden:

%Vor%     
Richard Peck 23.10.2013 12:21
quelle
1

Ich hatte das gleiche Problem mit 4.1.6 . Das Problem ist, dass Sie die before_action als private definiert haben. Ich weiß nicht warum, aber diese Art von Sichtbarkeit ist mit der Before_action-Last des Controllers in Rails verwechselt. Also bring signed_in_user außerhalb dieses Bereichs und es sollte wieder funktionieren.

Hoffe, das hilft!

    
WyrmxD 12.10.2014 12:00
quelle