无法找到有关如何将 Rails 中的表单拆分为多个较小表单的问题的答案。
假设您有一个大表单
- 名字
- 姓氏
- 性别
- 年龄
- 电子邮件
- 国家
- 城市
- 状态
我对所有这些字段都有一个validate_presence
。因此,当我创建多个表单时,例如:
= simple_form_for @profile, :wrapper => :inline do |f|
= f.label "firstname"
= f.select :firstname
没有顶部列表中的所有值(名字、姓氏等)我收到错误,因为拆分器表单不包含这些值,并且它们需要首先出现才能实现此目的根本没有工作。
拥有多个表单但仅包含部分值并更新它们而不出现上述问题的好方法是什么?
最佳答案
如果您希望能够更新模型的各个部分,那么您还需要将验证拆分为多个部分。
一种方法是在模型中拥有一个虚拟属性,该属性由每个表单中的隐藏字段设置。例如,您可能有一个表格:
= 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 属性,但进展是线性的。
关于ruby-on-rails - Ruby on Rails,将大表单拆分为单独的小表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8941049/