2010-03-19 9 views
8

Necesito saber el ID del usuario actual en un modelo:de Authlogic en modelos

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 

Pero supongo que eso no es cómo se hace?

Saludos,

Jacob

Respuesta

15

suponiendo que el usuario se loggedin puede utilizar

UserSession.find.user

Es posible que desee agregar controles para garantizar UserSession.find vuelve algo antes de llamar .user

+0

Muchas gracias, funcionó a la perfección. – jriff

+1

¿No sería el usuario actual ser solo? Si llamas current_user.save en algún lugar del controlador, entonces: after_save: algo sabrá todo sobre el usuario ... A menos que otro usuario pueda responder como el usuario actual, realmente no necesitas el método "current_user", supongo. – Hock

+0

Solo intentaba resolver esto yo mismo. ¡Gracias! – BBonifield

1

No es posible.
El usuario_actual se basa en la sesión, que no está disponible en el modelo (y eso es normal. Los modelos son independientes del contexto).

Debe pasar al usuario como parámetro al modelo.

+2

Esto no es correcto. – ybakos

+0

Es correcto para poder cumplir con MVC ... Por supuesto que técnicamente no es correcto. Eso no significa que sea una buena práctica. –

+2

Quise decir que decir "No es posible" no es correcto. Estoy de acuerdo contigo sobre la mala práctica. – ybakos

Cuestiones relacionadas