Ein Tutorial, das ich befolge, hat im Unterverzeichnis app/helpers
das folgende SessionsHelper-Modul, das von vielen Controllern und Views verwendet wird. Aber wo wird die Instanzvariable current_user
gespeichert, wenn sie zum ersten Mal erstellt wird? Was ist die Klasse des Objekts, in dem es gespeichert ist? Wenn ein Controller zuerst die current_user
-Methode aufruft, wird die current_user
Instanzvariable erstellt. Wenn eine Ansicht dann die current_user
Methode aufruft, wie ist es dann, dass eine current_user
Instanzvariable bereits vorhanden ist? Ist self
beim Rendern der Ansicht auf das Controller-Objekt gesetzt?Wo sind Instanzvariablen in einem Rails-Helper-Modul gespeichert?
module SessionsHelper
...
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
...
end
Ich denke, dass Sie diesem Linkfolgen können http://stackoverflow.com/questions/5575188/rails-tutorial-9-3-3-current-user – Shrikant1712
Ihre Frage ist eine gute - in der Tat gibt es eine Menge (einige würden sagen _unnötig_) Magie beim Rendern. Ich kenne den Prozess nicht im Detail, aber ich erinnerte mich, irgendwo gelesen zu haben, dass der Ansichtskontext eine Menge Dinge vom Controller kopiert hat, einschließlich der Instanzvariablen. Ich denke, aber ich bin mir nicht sicher, ob der View-Kontext auch jede Methode, die er nicht kennt, an den Controller delegiert. Dies benötigt eine gründlichere Recherche ... Ich denke, ich werde einige Zeit damit verbringen, durch die Quelle von Rails zu gleiten, und Sie sollten dasselbe tun: D –