Simple_form:如何更改输入的包装器类?(不是wrapper_html效果)

Pet*_*rZD 12 simple-form twitter-bootstrap ruby-on-rails-4

使用simple_form和Bootstrap时遇到问题3.关于输入的包装器标签.显示以下代码:

查看代码(带haml)

= simple_form_for @refer_email_form, url: create_refer_message_path, html: { class: "form-horizontal" } do |f|
  = f.input :to, label_html: { class: "col-sm-2" }
  = f.input :subject, label_html: { class: "col-sm-2" }
Run Code Online (Sandbox Code Playgroud)

配置/ simple_form_bootstrap.rb

SimpleForm.setup do |config|
  config.input_class = "form-control"

  config.wrappers :bootstrap, tag: 'div', class: 'form-group', error_class: 'error' do |b|
    b.use :html5
    b.use :placeholder
    b.use :label, class: "control-label"
    # b.wrapper tag: 'div', class: "col-sm-6" do |ba|
    b.wrapper tag: 'div' do |ba|
      ba.use :input
      ba.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
    end
  end

 config.default_wrapper = :bootstrap
Run Code Online (Sandbox Code Playgroud)

我只想默认使用"水平表单"

生成的html

...
\<div class="form-group string optional refer_email_form_to">
  <label class="string optional control-label col-sm-2" for="refer_email_form_to">To</label>
  <div>
    <input class="string optional form-control" id="refer_email_form_to"   name="refer_email_form[to]" type="text">
  </div>
</div>
...
Run Code Online (Sandbox Code Playgroud)

我想要的是改变<div>只包装<input>元素的类,如下所示:

...
<div class="col-sm-6">
  <input class="string optional form-control" id="refer_email_form_to"   name="refer_email_form[to]" type="text">
<div>
...
Run Code Online (Sandbox Code Playgroud)

我已经从simple_form的github页面读取了README,并且搜索了这个问题,我知道我可以通过添加b.wrapper tag: 'div', class: "col-sm-6" do |ba|config/simple_form_bootstrap.rb文件来实现这一点,但真正的问题是我可能会使用不同的div类,也许col-sm-9以其他形式.我在视图中尝试了input_html,wrapper_html但是wrapper_html对第一个效果的影响<div class="form-group">,以及input_html<input>元素的影响

有没有办法在视图中动态更改<input>包装器<div>

Hoa*_*Hoa 18

更改

b.wrapper tag: 'div' do |ba|
Run Code Online (Sandbox Code Playgroud)

b.wrapper :my_wrapper, tag: 'div' do |ba|
Run Code Online (Sandbox Code Playgroud)

设置输入字段如下

= f.input :to, label_html: { class: "col-sm-2" }, wrapper: :bootstrap, my_wrapper_html: { class: "css-class-name-goes-here" }
Run Code Online (Sandbox Code Playgroud)

生成的HTML是

<div class="form-group string optional refer_email_form_to">
  <label class="string optional control-label col-sm-2" for="refer_email_form_to">To</label>
  <div class="css-class-name-goes-here">
    <input class="string optional form-control" id="refer_email_form_to"   name="refer_email_form[to]" type="text">
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 我必须明确指定"bootstrap"包装器以使其工作.以下设置似乎没有生效config.default_wrapper = :bootstrap
  2. 当我bootstrap像你一样命名包装器时,它不起作用.当我使用不同的名称时,设置有效bootstrap_x.这可能是我的本地问题所以这只是为了您的信息,以防您遇到同样的问题.
  3. 如果您对上述所有内容感到好奇,请查看simple_form README文件,它位于"The wrappers API"部分.