在 simple_fields_for 中指定包装器

Specifying a wrapper in simple_fields_for

当使用 Simple Form gem 时,是否可以指定包装器及其 HTML?我不想通过 HTML 手动创建 <div>,但想了解是否有 wrapper 选项可以传递到 simple_fields_for

给定

<%= f.simple_fields_for :xxx, do |xxx| %>
  ...
<% end %>

我希望 simple_fields_for 创建一个包装器,<div class="xyz">...</div> 围绕其中的任何代码输出

类似问题:

最简单的方法可能就是创建一个包装 simple_fields_for.

的方法
# config/initializers/special_form_builder.rb
module SpecialFormBuilder
  def special_fields_for(record_name, record_object = nil, options = {}, &block)
    super.simple_fields_for(record_name, record_object = nil, options = {}) do
      content_tag :div, class: "xyz" do
        block.call
      end
    end
  end
end

module SimpleForm
  class FormBuilder
    include SpecialFormBuilder
  end
end

我遇到了这个问题,给定的解决方案不起作用,问题是隐藏的 id 字段在包装元素之外呈现。

看来问题不在simple_form,问题出在FormHelper#fields_for_nested_model方法中的rails。

此外,简单表单接受 simple_form_for 上的 wrapper 选项,但它定义了嵌套表单输入中使用的默认包装器,而不是表单本身的包装器。

我看到的唯一解决方案是使用选项 include_id: false 并在 wrapper 标记中添加隐藏字段。