在simple_form中的collection_radio_buttons的Reder类

时间:2015-10-27 16:02:34

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

我正在使用simple_form在我的Rails项目中创建一个表单。

<%= simple_form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post, id: 'invitations-form', class: 'invitations-form'} do |f| %>

      <%= f.input :first_name, label: false, placeholder: "Family Member's First Name", input_html: { maxlength: 15, size: 40, value: nil } %>

      <%= f.input :last_name, label: false, placeholder: "Family Member's Last", input_html: { maxlength: 15, size: 40, value: nil } %>

      <%= f.input :email, label: false, placeholder: "Enter Email Address", input_html: { value: nil } %>

      <div class="radio_buttons">
      <%= f.label "#{:gender}:"%>
      <%= f.collection_radio_buttons :gender, [["male", "male"] ,["female", "female"]], :first, :last %>
      </div>

      <%= f.input :invitation_relation, label: false, prompt: "I am this person's:", collection: relation_types, label_method: :humanize, input_html: { class: "browser-default dropmodule__input-select" } %>

      <%= submit_tag "Send Invitation" %>
  <% end %>

我使用了collection_radio_buttons方法创建了一组单选按钮。我不确定这是否相关,但我使用此方法而不是f.input :foo, as: :radio_buttons的原因是由于输入方法没有为我生成标签标签,我认为我现在可以使用label_html。我不确定这是否是一个可行的选择,但由于我花了很多时间,这个bug对我来说很麻烦。

这是上面相关div的html生成输出:

<div class="radio_buttons">
  <label class="string optional control-label" for="user_gender:">Gender:</label>
  <span>
    <input checked="checked" id="user_gender_male" name="user[gender]" type="radio" value="male">
    <label class="collection_radio_buttons" for="user_gender_male">male</label>
  </span>
  <span>
    <input id="user_gender_female" name="user[gender]" type="radio" value="female">
    <label class="collection_radio_buttons" for="user_gender_female">female</label>
  </span>
</div>

我需要每个radio_button的输入标记包含一个“with-gap”类,如下所示:

<input checked="checked" id="user_gender_male" class="with-gap" name="user[gender]" type="radio" value="male">

<input id="user_gender_female" class="with-gap" name="user[gender]" type="radio" value="female">

但我没有成功。虽然我真的想通过将类放在collection_radio_buttons方法的标签中来解决问题,但如果在simple_form中有替代方法,请将其显示为解决方案。

1 个答案:

答案 0 :(得分:0)

好的,我在这里找到了答案:

https://stackoverflow.com/a/30619068/4379077

我需要做的是添加item_wrapper_class作为方法的第5个参数。它看起来不像是可选的。当我尝试从参数列表中删除它时,我的类参数(方法中的第6个参数)被忽略。这是最后的输入:

<div class="radio_buttons">
  <%= f.label "#{:gender}:"%>
  <%= f.collection_radio_buttons :gender, [["male", "male"] ,["female", "female"]], :first, :last, {:item_wrapper_class => 'foo-bar'}, {:class => "with-gap" } %>
</div>

和最终输出:

<div class="radio_buttons">
  <label class="string optional control-label" for="user_gender:">Gender:</label>
  <span class="foo-bar">
    <input checked="checked" class="with-gap" id="user_gender_male" name="user[gender]" type="radio" value="male">
    <label class="collection_radio_buttons" for="user_gender_male">male</label >
  </span>
  <span class="foo-bar">
    <input class="with-gap" id="user_gender_female" name="user[gender]" type="radio" value="female">
    <label class="collection_radio_buttons" for="user_gender_female">female</label>
  </span>
</div>

如果有人知道如何inline_wrapper_class可选,请告诉我。