Ruby on rails,将一个大表单拆分成单独的小表单

时间:2012-01-20 11:54:46

标签: ruby-on-rails ruby-on-rails-3 forms ruby-on-rails-3.1

无法找到有关如何以多种较小的形式拆分轨道中的表单的问题的答案。

说你有一个很大的形式

  • 姓名
  • 名字
  • 性别
  • 年龄
  • 电子邮件
  • 国家
  • 城市
  • 状态

我对所有这些字段都有一个validate_presence。所以当我创建几个表单时:

= simple_form_for @profile, :wrapper => :inline do |f|

  = f.label "firstname"
  = f.select :firstname

没有顶部列表中的所有值(名字,姓氏等)我得到错误,因为拆分器表单不包含这些值,并且他们需要首先出现才能生成此错误工作。

有几种形式但只有一部分值并更新它们而不会出现上述问题的好方法是什么?

2 个答案:

答案 0 :(得分:3)

如果您希望能够更新模型的各个部分,那么您还需要将验证分成几部分。

一种方法是在模型中拥有一个虚拟属性,该属性由每个表单中的隐藏字段设置。例如,您可能有一个表格:

= simple_form_for @profile, :wrapper => :inline do |f|
  = f.hidden :form, :input_html => {:value => 'names'} 
  = f.label "firstname"
  = f.select :firstname

然后在你的模型中:

class Profile
  attr_accessor :form

  validates :firstname, :presence => true, :if => lambda { |o| o.form == "names" }
end

只有在从正确的表单提交更改时才会运行验证。

查看条件验证指南:http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation了解更多详情。

其他方式是apneadiving建议的多步形式:http://railscasts.com/episodes/217-multistep-forms这使用与第一个示例中相同的技术,具有current_step属性,但进展是线性的。

答案 1 :(得分:1)

我猜你想要一个多步形式。

查看this screencast,您会找到条件验证,这是继续进行的方式。