Ruby on rails Rails中的多页表单

Ruby on rails Rails中的多页表单,ruby-on-rails,model-view-controller,validation,forms,Ruby On Rails,Model View Controller,Validation,Forms,我有一个非常复杂的模型,有很多字段,有很多关联,image\u列添加的图像等等 新对象将通过多页表单(8个步骤)添加-我应该如何在这些步骤之间完成验证和传播 我认为,validation\u group对于定义每个步骤的验证可能很有用,那么总体设计呢?对于总体设计,您可能希望了解演示者层的概念(Jay Fields在他的博客条目中定义了它)在处理复杂/多个模型时,可以使用一种精简控制器和视图的方法。您可以使用一系列方法,例如步骤1,步骤2,每个方法都会检查上一步中的必要数据是否已提交。您可以在会

我有一个非常复杂的模型,有很多字段,
有很多关联,
image\u列添加的图像
等等

新对象将通过多页表单(8个步骤)添加-我应该如何在这些步骤之间完成验证和传播


我认为,
validation\u group
对于定义每个步骤的验证可能很有用,那么总体设计呢?

对于总体设计,您可能希望了解演示者层的概念(Jay Fields在他的博客条目中定义了它)在处理复杂/多个模型时,可以使用一种精简控制器和视图的方法。

您可以使用一系列方法,例如
步骤1
步骤2
,每个方法都会检查上一步中的必要数据是否已提交。您可以在会话中存储数据,例如,步骤3仍然可以访问步骤1中收集和解析的所有数据。在最后一步中,将存储在会话中的所有数据加上倒数第二步中要使用的数据,并在数据库中创建新行或为其收集数据的任何内容。如果用户弄乱了一个步骤,将他们重定向到上一个步骤,并用他们填写的数据为他们填写表格;e、 g.如果用户弄乱了步骤2并提交了导致步骤3的表单,请在
步骤3
方法中发现问题,将用户重定向到
步骤2
方法,并确保步骤2中的表单元素已预填充

如果不希望在执行过程中在会话中存储数据,可以在用户提交步骤1后创建一个新的数据库行,并在每个后续步骤中收集新数据时更新该行中的字段。行上可以有一些“complete”标志,最初将其设置为0,然后在用户成功完成所有步骤后将其设置为1

您还可以允许用户转到前面的步骤(例如,让用户在执行步骤5时返回步骤3)

假设您的第一步有一个带有“name”和“email”字段的表单。在
step_2
方法中,应验证
params[:name]
params[:email]
是否已传递且有效。将这些存储在会话或数据库行中,无论您选择何种方式。然后在第2步中,您有一个带有“年龄”和“性别”字段的表单。在
step_3
方法中,您应该验证
params[:age]
params[:gender]
是否已通过且有效,并且您还需要确保用户已完成步骤1,以防止用户输入URL直接访问步骤3。等等。

班级活动class Campaign < ActiveRecord::Base
    with_options(:if => lambda { |campaign| campaign.on_or_past_step(:spam_can) }) do |spam_can|
      spam_can.validates_associated  :spam_can
      spam_can.validates_presence_of :spam_can
    end
  def on_or_past_step
   :
   :
  end
end
使用_选项(:if=>lambda{| campaign | campaign.on _或_pass_step(:spam_can)})执行| spam_can| 垃圾邮件\u can.验证\u关联:垃圾邮件\u can 垃圾邮件\u can.验证\u是否存在:垃圾邮件\u can 结束 def接通或超过步骤 : : 结束 结束

这是一项正在进行的工作,但我觉得我走在了正确的轨道上。我使用状态来确定要运行哪些验证。我还没有弄清楚路由应该如何工作,因为在我的案例中讨论的模型是一个资源。例如,哪一组字段应该是编辑操作?

我使用此方法是因为我的表单包含文件上载字段。在我的例子中,走这条路要比处理会话容易得多。