Ruby on Rails用户确认不更新参数

时间:2012-05-04 14:53:29

标签: ruby-on-rails ruby-on-rails-3.1

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

  1. account_status_id设置为1(未经证实)
  2. 用户已登录(现在为current_user)
  3. 生成new_account_confirmation_token
  4. 使用包含new_account_confirmation_token
  5. 的链接向新用户发送确认电子邮件

    我最初尝试使用此方法处理确认链接。它找到没有问题的用户,代码流经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
    

1 个答案:

答案 0 :(得分:0)

即使您的用户如您所说“内存”,也没有理由不更新。我相信您的更新正在发生,但由于current_user@user不同步,您才会看到它。

我不知道您是如何验证@user未更新的,但如果update_attributes!没有抛出错误,那么它就会被保存。