2010-03-19 4 views
8

мне нужно знать идентификатор текущего пользователя в модели:Authlogic в моделях

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 

Но я думаю, что это не так, как это делается?

С уважением,

Jacob

ответ

15

при условии, что пользователь LoggedIn вы можете использовать

UserSession.find.user

Вы можете добавить проверку, чтобы убедиться, UserSession.find возвращает что-то перед вызовом .user

+0

Спасибо большое - отлично работал. – jriff

+1

Не будет ли current_user быть просто собой? Если вы вызываете current_user.save где-то в контроллере, то: after_save: что-то будет знать все о пользователе ... Если другой пользователь не может ответить как current_user, вам действительно не нужен метод current_user, я думаю .. – Hock

+0

Я просто пытался понять это сам. Благодаря! – BBonifield

1

Это не возможно.
current_user полагается на сеанс, который недоступен в модели (и это нормально. Модели не зависят от контекста).

Вы должны передать пользователя в качестве параметра.

+2

Неправильное использование. – ybakos

+0

Это правильно, чтобы оставаться совместимым с MVC ... Конечно, это технически не правильно. Это не значит, что это хорошая практика. –

+2

Я имел в виду, что говорить «Это невозможно» неверно. Я согласен с вами в отношении плохой практики. – ybakos

0

Лучший способ получить доступ к CURRENT_USER в модели (s) при использовании Authlogic используется Sentiant User - https://github.com/bokmann/sentient_user Существует полная документация о том, как его использовать.

Смежные вопросы