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接通或超过步骤
:
:
结束
结束
这是一项正在进行的工作,但我觉得我走在了正确的轨道上。我使用状态来确定要运行哪些验证。我还没有弄清楚路由应该如何工作,因为在我的案例中讨论的模型是一个资源。例如,哪一组字段应该是编辑操作?我使用此方法是因为我的表单包含文件上载字段。在我的例子中,走这条路要比处理会话容易得多。