2010-03-19 7 views
8

Ich brauche die ID des aktuellen Benutzers in einem Modell wissen:Authlogic der current_user Objekt in Modellen

def after_save 
    desc, points=nil, nil 

    if answer_index == daily_question.correct_answer_index 
    desc = I18n.t('daily_question.point_log.description.correct') 
    points=daily_question.points 
    else 
    desc = I18n.t('daily_question.point_log.description.incorrect') 
    end 

    current_user.give_points(:description => desc, 
          :points => points 
         ) 
end 

Aber ich denke, dass ist nicht, wie es gemacht wird?

Grüße,

Jacob

Antwort

15

vorausgesetzt, der Benutzer ist eingeloggt hat Sie

UserSession.find.user

Sie prüft hinzufügen möchten UserSession.find kehrt etwas, um sicherzustellen, vor dem Aufruf verwenden können .user

+0

Vielen Dank - hat perfekt funktioniert. – jriff

+1

Wäre der current_user nicht nur selbst? Wenn Sie current_user.save irgendwo im Controller aufrufen, dann wird das: after_save: irgendwas alles über den Benutzer wissen ... Wenn nicht ein anderer Benutzer als current_user antworten kann, brauchen Sie nicht wirklich die "current_user" -Methode, denke ich. – Hock

+0

Ich habe gerade versucht, das herauszufinden. Vielen Dank! – BBonifield

1

Es ist nicht möglich.
Der current_user verlässt sich auf die Sitzung, die im Modell nicht verfügbar ist (und das ist normal. Die Modelle sind kontextunabhängig).

Sie sollten den Benutzer als Parameter an das Modell übergeben.

+2

Dies ist nicht korrekt. – ybakos

+0

Es ist korrekt, um MVC-konform zu bleiben ... Natürlich ist es technisch nicht korrekt. Das bedeutet nicht, dass es eine gute Übung ist. –

+2

Ich meinte, dass das sagen "Es ist nicht möglich" ist nicht korrekt. Ich stimme dir mit der schlechten Praxis zu. – ybakos

0

Der beste Weg, um die current_user im Modell zugreifen (s) bei der Verwendung von Authlogic verwendet Sentiant Benutzer - https://github.com/bokmann/sentient_user Es gibt eine vollständige Dokumentation über die dort, wie man es benutzt.