2010-03-19 3 views
8

Je dois savoir l'ID de l'utilisateur actuel dans un modèle:l'objet de current_user Authlogic dans les modèles

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 

Mais je suppose que ce n'est pas comment cela se fait?

Cordialement,

Jacob

Répondre

15

supposant que l'utilisateur est loggedIn vous pouvez utiliser

UserSession.find.user

Vous pouvez ajouter des contrôles pour assurer quelque chose UserSession.find de retour avant d'appeler .user

+0

Merci beaucoup - a parfaitement fonctionné. – jriff

+1

L'utilisateur actuel ne serait-il pas soi-même? Si vous appelez current_user.save quelque part dans le contrôleur, alors: after_save: quelque chose saura tout sur l'utilisateur ... A moins qu'un autre utilisateur ne puisse répondre en tant qu'utilisateur current_util, vous n'avez pas vraiment besoin de la méthode "current_user". – Hock

+0

J'essayais juste de comprendre cela moi-même. Merci! – BBonifield

1

Il est impossible.
Le current_user repose sur la session, qui n'est pas disponible dans le modèle (et c'est normal, les modèles sont indépendants du contexte).

Vous devez transmettre l'utilisateur au modèle en tant que paramètre.

+2

Ce n'est pas correct. – ybakos

+0

Il est correct afin de rester conforme MVC ... Bien sûr, il est techniquement incorrect. Cela ne veut pas dire que c'est une bonne pratique. –

+2

Je voulais dire que dire "Ce n'est pas possible" n'est pas correct. Je suis d'accord avec vous sur la mauvaise pratique. – ybakos

0

La meilleure façon d'accéder au current_user dans le modèle (s) lors de l'utilisation Authlogic utilise Sentiant User - https://github.com/bokmann/sentient_user Il ya une documentation complète sur le là comment l'utiliser.

Questions connexes