如何使用 Wicked gem 保存用户在向导中离开的步骤?

时间:2021-04-11 22:46:16

标签: ruby-on-rails rubygems wicked-gem state-saving


上下文

我是 Rails 应用程序开发的新手,所以如果我遗漏了一些关于在 Rails 中保存/存储状态的明显内容,请告诉我。我在我的应用程序中使用了 Wicked gem引导用户完成医疗评估的应用,该应用包含以下步骤:

  1. 个人信息
  2. 一般医疗问题
  3. 具体疾病问题
  4. 同意
  5. 提交

问题

如果用户在评估的某个部分离开以查看应用的另一个页面,或者如果他们不小心关闭了浏览器,他们将丢失所有进度。


我尝试了什么

  • 我在每一步都添加了一个保存按钮,用户可以点击保存他们目前输入的信息,离开和回来时,他们会为他们预先填写信息。然而,这不是我正在寻找的 UX,因为用户仍然必须从第一步开始,然后继续单击下一步,直到他们到达上次执行的步骤或使用导航找到该步骤。 我希望向导在他们停止的地方自动打开。

  • 我尝试了这种方法,为用户添加了一个名为 :assessment_step 的属性,并在每次用户到达新步骤时更新它,并在用户打开向导时转到该步骤(如果该步骤存在) .这种方法有效,但非常笨拙,根本无法扩展。随着我添加更多步骤和更多向导,这将很难维护。代码如下:

    class MedicalAssessmentController < ApplicationController
      include Wicked::Wizard
    
      steps :personal_info, :medical_questions, :disease_questions, :consent, :submit
    
      def show
        @user = current_user # default assessment step is 0
        @steps = [:personal_info, :medical_questions, :disease_questions, :consent, :submit]
        case step
        when :personal_info
          if @user.assessment_step != 0:
            jump_to(@steps[@user.assessment_step])
          @user.update_attribute(:assessment_step, 0) # set the step reached to step 0
        when :medical_questions
          @user.update_attribute(:assessment_step, 1)
        when :disease_questions
          @user.update_attribute(:assessment_step, 2)
        when :consent
          @user.update_attribute(:assessment_step, 3)
        when :submit
          @user.update_attribute(:assessment_step, 4)
        end
        # DO MORE STUFF
        render_wizard
      end
    end
    

我读过的东西

我在 SO 或在线任何地方都找不到任何类似的问题。 Wicked gem 文档并没有真正提到任何类似的东西。

0 个答案:

没有答案
相关问题