Rails - 控制器操作之间会话变量丢失

时间:2016-09-14 19:21:58

标签: ruby-on-rails ruby ruby-on-rails-4

编辑 - 我误解了问题的确切性质,转而在此处更好地掌握了问题:Rails / Devise - updating session variables between controller actions

我正在使用会话变量在我的Rails应用程序中的三个表单提交控制器操作之间传递数据,但我遇到的问题是,第一次运行时进程工作但第二次失败,因为会话变量没有传递给后续的控制器操作 - 但是,如果我清除我的浏览器历史记录,它可以正常工作(但如果我尝试重复而不清除历史记录等,则会失败)。该应用程序使用Devise进行用户登录,问题似乎与在注销时被销毁的会话有关。

这里讨论的会话变量是session[:ids],似乎没有先清除浏览器历史记录,它就没有从submission操作传递到approval操作。

以下是路线:

post 'report/submission'
get 'report/approval'
get 'report/summary' => 'report#summary'

关联的控制器操作(添加了几组puts来检查控制台中的变量值):

def submission
    @incomingReport = ActiveSupport::JSON.decode(params[:report])

    @newReportIDArray = Array.new

    @incomingReport.each do |x|
        #DATA PROCESSING STUFF HERE
        @newReportIDArray.push(@new_report.id)
    end

    session[:ids] = @newReportIDArray

    puts "submission_marker"
    puts @newReportIDArray
    puts "submission_marker_end"

    respond_to do |format|
      format.json do
        render json: {
          success: 200
        }.to_json
      end
    end
end

#USER LOGIN OCCURS HERE
def approval
    @reportIDs = session[:ids]

    puts "approval_marker"
    puts @reportIDs
    puts "approval_marker_end"

    @reportIDs.each do |x|
        @new_report = Report.find(x)
        @new_report.user_id = current_user.id
        @new_report.save
    end

    redirect_to report_summary_path
end


def summary
    @reportIDs = session[:ids]

    puts "summary_marker"
    puts @reportIDs
    puts "summary_marker_end"
end
#USER LOGS OUT AFTER SUMMARY

因此,如果我使用干净的历史记录运行它,我的控制台看起来像这样:

submission_marker
766
submission_marker_end

approval_marker
766
approval_marker_end

summary_marker
766
summary_marker_end

但如果我在第一个summary之后退出,然后我尝试在不清除历史记录的情况下完成整个过程,那么我最终会

submission_marker
767
submission_marker_end

approval_marker

approval_marker_end

和错误undefined method 'each' for nil:NilClass,引用@reportIDs.each操作中的approval

我在这里缺少什么?为什么在干净的历史记录中,一切运行正常,但是有了“脏”历史记录,会话变量会为submission操作设置,但会在/ approval操作的路上被删除?我看到这与Devise和会话的破坏有关,但我不明白为什么我不能创建一个新的会话变量。

0 个答案:

没有答案