【问题标题】:Specifying a wrapper in simple_fields_for在 simple_fields_for 中指定包装器
【发布时间】:2017-08-16 20:36:30
【问题描述】:

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

给定

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

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

类似问题:

【问题讨论】:

  • 您希望 DIV 在表单内部还是外部?
  • 在表格内。 simple_fields_for 用于嵌套表单,它位于父表单内。我希望 div 包装这个嵌套表单。
  • 抱歉,您的意思是simple_form

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


【解决方案1】:

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

【讨论】:

  • 你能举例说明如何使用这个吗?
  • f.special_fields_for :xxx, do |xxx| - 它只是包装了simple_fields_for 方法。
  • 它未经测试,我不能 100% 确定 simple_fields_for 的调用签名。这是fields_for 的签名。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多