У меня есть процесс, в котором пользователь может активировать код, полученный им: процесс активации необходимо сделать следующее:Как правильно обращаться с кодами активации активации в Rails?
- Добавить X кредиты для учетной записи пользователя (User.credits)
- Создать новый пункт кредитного лота (только для целей истории)
- Отметьте код как активированный, чтобы пользователь не смог его активировать снова.
У меня есть специальный контроллер для выполнения этой задачи. Я создал метод «code_activate», который работает. Я считаю, что это не ACID. Должен ли это быть методом в некоторой модели (пользователь?) Или в контроллере, как я это сделал? Как бы вы реализовали его «правильно»?
Вот код:
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(/@[email protected]/, code.amount.to_s)) }, :status => :ok
end