如何将SimpleForm输入配置为默认无包装器

时间:2018-08-19 10:44:38

标签: ruby-on-rails simple-form

提供自定义的SimpleForm输入

class MyCustomInput < SimpleForm::Inputs::Base
  # some stuff
end

如何配置它,以使这些输入在默认情况下没有包装。

通常我会这样设置输入特定的包装器:

# initializers/simpleform
config.wrapper_mappings = {
  my_custom: :my_wrapper
}

但是以下方法不起作用,并且默认的SimpleForm包装器仍然适用。

config.wrapper_mappings = {
  my_custom: false
}

我知道在视图中有多种方法可以实现此目的,例如

<%= f.input :attribute, as: :my_custom, wrapper: false %>

<%= f.input_field :attribute %>

但这不是我想要的。

有没有一种配置输入的方法,以便默认情况下没有包装器?

1 个答案:

答案 0 :(得分:1)

除了您已经在问题中提到的选项之外,仅使用input_field而非input(更多信息:https://github.com/plataformatec/simple_form#stripping-away-all-wrapper-divs),您可以这样定义包装器(未经测试) :

SimpleForm.setup do |config|
  config.wrapper_mappings = {
    my_custom: :wrapper_false,
  }

  config.wrappers :wrapper_false, tag: false do |b|
    b.use :placeholder
    b.use :label_input
    b.use :hint,  wrap_with: { tag: :span, class: :hint }
    b.use :error, wrap_with: { tag: :span, class: :error }
  end
end

然后在您的表单中:

<%= f.input :attribute, as: :my_custom %>

有关包装API的更多信息:https://github.com/plataformatec/simple_form#the-wrappers-api

编辑:

考虑到您提到的情况之后,请I sent a PRsimple_form进行投影,以允许在wrapper: false中配置wrapper_mappings。如果它被接受,您应该能够直接在初始化程序中禁用包装器,如下所示:

config.wrapper_mappings = {
  my_custom: false
}