ruby-on-rails - Ruby on Rails,将大表单拆分为单独的小表单

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

无法找到有关如何将 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/

相关文章:

forms - 表单提交按钮在 Bootstrap 模式窗口中不起作用

javascript - 将 URL 传递到表单字段的 Bookmarklet

ruby-on-rails - 如何让 Rails 默认使用系统时间?

android - 安全 API 访问 : best strategy to secure readonly rails api for android client

ruby-on-rails - 为什么回形针插值不起作用?

用于 Ruby On Rails 的 MySQL Gem

ruby-on-rails - 无法在 Ruby on Rails 中创建数据库

ruby-on-rails-3 - 为什么Rails 3.2.2在使用redirect_to时生成带有/assets前缀的URL?

javascript - 如何使 jquery 切换操作遍历我的所有内容?

ruby-on-rails - Rails 5 如何保存 postgres 中两个日期时间之间的小时和分钟差异?