Wicked Rails Gem帮助接线

时间:2013-04-12 20:51:32

标签: ruby-on-rails-3 forms activerecord rails-activerecord multi-step

我想做一个多步骤表格来接收新信息。一页我想收集姓名/联系信息,下一页我想收集病史,第三页是人口统计信息。

我已经安装了Wizard gem并生成了一个专用控制器。我在其上看到的所有教程都适用于设计和注册过程,因此我对控制器操作和实例变量有点失落以及我应该如何编写它们。

想知道是否有人有一个除注册之外的教程,这可能会帮助我学习如何将这一切都搞定。

感谢任何指示或帮助。

编辑:

我认为我的问题出现在我的向导的控制器中。

在演示和更新操作中,演示显示声明

的变量
@user = current_user

那很好,但这是我不需要的辅助方法。我需要创建一个患者,将patient_id存储在我在主要患者控制器中创建动作的会话中。然后以某种方式将其传递给了患者步骤控制器。

这是我在患者步骤中尝试的内容

class PatientstepsController < Wicked::WizardController
  before_filter :authenticate_user!

  steps :medical, :summary

  def show
    @patient = Patient.find(params[:patient_id])
    render_wizard
  end

  def update
    @patient = Patient.find(params[:id])
    @patient.attributes = params[:patient]
    render_wizard @patient
  end
end

当我这样做时,我找不到没有和身份证的病人。我明白我做错了,但我不确定如何传递在我的病人控制器创建动作中创建的patient_id。

患者控制器创建:

 def create
    @patient = Patient.new(params[:patient])

    if @patient.save
        session[:patient_id] = @patient.id
        redirect_to patientsteps_path, notice: "Patient was successfully created."
      else
        render :new
     end
  end

1 个答案:

答案 0 :(得分:2)

在你的节目动作中,你应该使用session [:patient_id]而不是params [:patient_id],因为患者的id存储在会话中,而不是存储在params散列中。

然后在更新操作中,您将收到params [:patient_id]中的患者ID,而不是[:id],因为wicked使用params [:id]来确定向导所在的步骤。