在我的应用程序中,我有一个用户确认过程。当用户注册时,会发生四件事:
- account_status_id 设置为 1(未确认)
- 用户已登录(现在 current_user 存在)
- 生成一个 new_account_confirmation_token
- 将向新用户发送一封确认电子邮件,其中包含包含 new_account_confirmation_token 的链接
我最初尝试用这种方法处理确认链接。它可以毫无问题地找到用户,并且代码流过 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