У меня есть процесс, при котором пользователь может активировать полученный код: процесс активации должен выполнить следующее:
- Добавить X кредитов в учетную запись пользователя (User.credits)
- Создание нового элемента кредитного журнала (только для целей истории)
- Отметьте код как активированный, чтобы пользователь не мог активировать его снова.
У меня естьконкретный контроллер для этой задачи.Я создал метод "code_activate", который работает.Но я считаю, что он не совместим с кислотой.Должен ли это быть метод в некоторой модели (пользователь?) Или в контроллере, как я это сделал?Как бы вы реализовали это «правильным способом»?
Вот код:
def code_activate
code = CreditCodes.find_by_code(params[:code])
unless code
render :json => { :success=>false, :message=>(t :codedoesnotexist)}
return
end
if code.activated
render :json => { :success=>false, :message=>(t :codealreadyactivated)}
return
end
# Add credits to user
current_user.credits += code.amount
current_user.save
# Save credit log record
cl = current_user.creditlog.new
cl.actionid = 1
cl.amount = code.amount
cl.save
# Set code as activated
code.activated = true
code.save
# Show success message
render :json => { :success=>true, :message=>((t :creditsadded).gsub(/@AMOUNT@/, code.amount.to_s)) }, :status => :ok
end