0
我有一个过程,其中用户可以激活,他们已经收到了代码:激活过程中应做到以下几点:如何在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