0

在我的应用程序中,我有一个用户确认过程。当用户注册时,会发生四件事:

  1. account_status_id 设置为 1(未确认)
  2. 用户已登录(现在 current_user 存在)
  3. 生成一个 new_account_confirmation_token
  4. 将向新用户发送一封确认电子邮件,其中包含包含 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
4

1 回答 1

0

即使您的用户像您所说的那样“在内存中”,也没有理由不更新。我相信您的更新正在发生,但您只是没有看到它,因为current_user@user.

我不知道您如何验证@user未更新但如果update_attributes!未引发错误则将其保存。

于 2012-05-04T16:35:38.657 回答