如何防止simple_form将默认标签应用于自定义包装器?

时间:2016-03-19 04:54:06

标签: ruby-on-rails simple-form

我正在使用SimpleForm + Bootstrap。我需要在复选框输入后立即添加<i></i>标记,如下所示:

<div class="form-group">
  <div class="checkbox">
    <label class="checkbox">
      <input type="checkbox" >
      <i></i>
      Label Text
    </label>
  </div>
</div>

所以我修改了初始化程序

#initializers/simple_form_bootstrap.rb
config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
  b.use :html5
  b.optional :readonly

  b.wrapper tag: 'div', class: 'checkbox' do |ba|
    ba.wrapper tag: 'label' do |bb|
      bb.use :input
      bb.wrapper tag: 'i' do |baa|
      end
      bb.use :label_text
    end
  end

  b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
  b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
end 

但这是插入额外的标签标签

<div class="form-group">
  <div class="checkbox">
    <label>
    <label class="checkbox">
      <input type="checkbox" >
      <i></i>
      Label Text
    </label>
    </label>
  </div>
</div>

label.checkbox是simple_form应用的默认标签。即,通过config.boolean_label_class = 'checkbox'。所以看起来我可以删除自定义标签包装。

b.wrapper tag: 'div', class: 'checkbox' do |ba|
  # ba.wrapper tag: 'label' do |bb|
    bb.use :input
    bb.wrapper tag: 'i' do |baa|
    end
    bb.use :label_text
  # end
end

但是标签只围绕输入。

<div class="form-group">
  <div class="checkbox">
    <label class="checkbox">
      <input type="checkbox" >
    </label>
    <i></i>
    Label Text
  </div>
</div>

我尝试过启用和停用inline_label。我正在使用包含默认simple_form包装器的新配置文件。唯一的修改如上。

为什么Simple_Form在未调用use label_input的情况下对输入应用标签?

如何配置simple_form以使用标签包装输入,<i>标签和标签文本?

1 个答案:

答案 0 :(得分:0)

这让我想起了很多头疼的问题,但最终有一个简单的解决办法。

为了遇到类似问题的其他人的利益,请在初始化程序中进行以下更改

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()

在此更改之后,我的自定义包装器按预期运行,没有“神奇地”出现的其他元素。