在simple_fields_for中指定包装器

时间:2017-08-16 20:36:31

标签: ruby-on-rails ruby-on-rails-5 simple-form

使用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>

类似问题:

2 个答案:

答案 0 :(得分:2)

最简单的方法可能就是创建一个包裹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

答案 1 :(得分:0)

我正面临这个问题,给定的解决方案不起作用,问题在于隐藏的id字段在wrapper元素外部呈现。

问题似乎不是simple_form,问题出在FormHelper#fields_for_nested_model方法中。

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

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