Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails用户确认未更新参数_Ruby On Rails_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails RubyonRails用户确认未更新参数

Ruby on rails RubyonRails用户确认未更新参数,ruby-on-rails,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3.1,在我的应用程序中,我有一个用户确认过程。当用户注册时,会发生四件事: 帐户状态id设置为1(未确认) 用户已登录(当前用户已存在) 生成一个新的\u帐户\u确认\u令牌 将向新用户发送一封确认电子邮件,其中包含一个包含新帐户确认令牌的链接 我最初尝试用这种方法处理确认链接。它找到了没有问题的用户,代码通过update_属性流动!方法,但它没有更新帐户状态。据我所知,这是由于当前用户对象存在,因此我试图更新的用户已经“在内存中”。对吗 def new_account_confirmation

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

  • 帐户状态id设置为1(未确认)
  • 用户已登录(当前用户已存在)
  • 生成一个新的\u帐户\u确认\u令牌
  • 将向新用户发送一封确认电子邮件,其中包含一个包含新帐户确认令牌的链接
  • 我最初尝试用这种方法处理确认链接。它找到了没有问题的用户,代码通过update_属性流动!方法,但它没有更新帐户状态。据我所知,这是由于当前用户对象存在,因此我试图更新的用户已经“在内存中”。对吗

      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
    
    我的工作如下。下面的代码可以工作,但我想知道为什么上面的代码不能工作。为什么不更新帐户状态

      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
    
    即使您的用户如您所说“在内存中”,也没有理由不更新。我相信您的更新正在发生,但您只是没有看到它,因为
    当前用户
    @user
    不同步


    我不知道你是如何验证
    @user
    没有被更新的,但是如果
    更新属性
    没有抛出错误,然后它被保存。

    您能确认第一组代码是否更新了数据库中的行吗?看起来是对的。但是是的,我想,因为当前的用户在内存中,所以它不会更新。出于好奇,您是否正在序列化会话中的整个用户对象?一般来说,最好只存储id,并在请求时查询它,以便始终拥有最新的信息。第一种方法不更新数据库中的行。我只在会话中存储用户id,而不是整个当前用户对象谢谢您的回复。这是有道理的,但事实并非如此。我正在从rails控制台检查db(重新加载!我能想到的一切都刷新它),但它不会更新状态。是否有可能@user和current_user引用了两个单独的数据实例,但它们没有正确同步?从我看到的代码来看,如果用户以user1身份登录,但单击了user2的确认链接,则它们将不同步。您从不检查当前用户是否等于@user。但是很容易检查-在代码运行后,查看
    当前用户
    @user
    是什么。