如何在简单表单中的每个单选按钮之前添加标记?

时间:2017-12-11 18:06:18

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

简单的必要性,但显然没有简单的方法来使用Simple Form。

我需要在使用简单表单的Rails表单中的每个无线电span之前放置一个input。我已成功将span添加到this guidelines中所述的文本输入中,但我无法弄清楚如何使用单选按钮(以及检查)执行相同的操作框)。

我不想使用jQuery,我目前正在使用它作为解决方法。

更新1

正如@TarynEast在评论中提到的那样,我尝试使用以下代码创建初始化程序,我已经能够将span标记添加到字符串input

初始化程序

# config/initializers/simple_form__spanner
class SpannerInput < SimpleForm::Inputs::Base
  def input(wrapper_options)
    merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)

    spanner_input = "<span></span>"
    spanner_input << @builder.text_field(attribute_name,merged_input_options)
    return spanner_input.html_safe
  end
end

视图

# the view code
<%= ff.input :xxx, label: 'XXX', as: :spanner %>

HTML输出

# the output in view
<div class="form-group spanner optional xxx">
  <div class="control-label-wrap">
    <label class="control-label spanner optional" for="xxx_1">XXX</label>
  </div>
  <span></span> 
  <input class="form-control spanner optional" type="text" value="some value" name="xxx[1]" id="xxx_1">
</div>

现在我希望能够用单选按钮和复选框做同样的事情。输出应该是这样的:

<label><span></span><input ... ></label>
<label><span></span><input ... ></label>
<label><span></span><input ... ></label>

更新2

(几乎是解决方案)

我有一些东西可以某种方式做我想要的,即在一组单选按钮或复选框中每个输入span。它输出input标签之后的范围,但是在文本之前,它有点起作用。

该解决方案不会使用任何初始化程序,它只是为集合中的每个对象运行的 lambda

假设您有一个名为choices的数组:

choices = [ 
  { label: "Foo", value: "foo" },
  { label: "Bar", value: "bar" }
]

视图

# the view code
<%= ff.input :xxx, 
      collection: choices, 
      label_method: -> (choice){ "<span></span>#{ choice[:label] }".html_safe } %>

输出

<label><input ... ><span></span> Foo </label>
<label><input ... ><span></span> Bar </label>

0 个答案:

没有答案