在我的应用程序中,我有一个用户确认过程。当用户注册时会发生四件事:
我最初尝试使用此方法处理确认链接。它找到没有问题的用户,代码流经update_attributes!方法,但它没有更新account_status。据我所知,这是因为current_user对象存在,因此我尝试更新的用户已经“在内存中”了。这是对的吗?
def new_account_confirmation
@title = "Account Confirmation"
logger.info("User is not logged in")
@user = User.find_by_new_account_confirmation_token(params[:confirm_id])
if @user
@user.update_attributes!(:account_status_id => 2)
else
redirect_to root_path
end
end
我的工作如下。下面的代码有效,但我想知道为什么上面的代码不起作用。为什么不更新account_status?
def new_account_confirmation
@title = "Account Confirmation"
if current_user
logger.info("User is logged in")
current_user.update_attributes!(:account_status_id => 2)
else
logger.info("User is not logged in")
@user = User.find_by_new_account_confirmation_token(params[:confirm_id])
if @user
@user.update_attributes!(:account_status_id => 2)
else
redirect_to root_path
end
end
end
答案 0 :(得分:0)
即使您的用户如您所说“内存”,也没有理由不更新。我相信您的更新正在发生,但由于current_user
与@user
不同步,您才会看到它。
我不知道您是如何验证@user
未更新的,但如果update_attributes!
没有抛出错误,那么它就会被保存。