表单上的单选按钮在表单验证失败后无法正确呈现 - 引导程序

时间:2014-03-05 21:36:05

标签: html ruby-on-rails twitter-bootstrap radio-button

使用Bootstrap 3的Rails 4应用程序

我有一个包含来自单选按钮输入的表单:

<strong> Radio button options on form </strong><br>
   <div class="form-group">
     &nbsp<%= f.radio_button :category, 'A' %> &nbsp <%= f.label "A", "A" %><br /> 
     &nbsp<%= f.radio_button :category, 'B' %> &nbsp <%= f.label "B", "B" %><br />  
     &nbsp<%= f.radio_button :category, 'C' %> &nbsp <%= f.label "C", "C" %><br />
   </div>

第一次加载表单时,一切看起来都是正确的:

enter image description here

我的问题是,如果表单由于验证错误而失败(缺少所需的输入等,在表单上的任何位置),当页面重新呈现时,单选按钮和标签显示在两个不同的行上:< / p>

enter image description here

如何解决此问题?

更新 为每个生成的HTML是: 原文(正确):

    <strong> Radio button options on form </strong><br>
    <div class="form-group">
      &nbsp<input id="listing_category_1" name="listing[category]" type="radio" value="1" /> &nbsp <label for="listing_1">A</label><br /> 
      &nbsp<input id="listing_category_2" name="listing[category]" type="radio" value="2" /> &nbsp <label for="listing_2">B</label><br />  
      &nbsp<input id="listing_category_3" name="listing[category]" type="radio" value="3" /> &nbsp <label for="listing_3">C</label><br />
    </div>

重新渲染(不正确):

    <strong> Radio button options on form </strong><br>
    <div class="form-group">
      &nbsp<div class="field_with_errors"><input id="listing_category_1" name="listing[category]" type="radio" value="1" /></div> &nbsp <label for="listing_1">A</label><br /> 
      &nbsp<div class="field_with_errors"><input id="listing_category_2" name="listing[category]" type="radio" value="2" /></div> &nbsp <label for="listing_2">B</label><br />  
      &nbsp<div class="field_with_errors"><input id="listing_category_3" name="listing[category]" type="radio" value="3" /></div> &nbsp <label for="listing_3">C</label><br />
    </div>

1 个答案:

答案 0 :(得分:7)

这是因为Rails将包含错误的字段换行到div

<div class="field_with_errors">
  <input name="foo" type="radio" value="1" />
</div>

要解决的一种方法是自定义此css课程,例如制作div显示属性inline而不是block

.field_with_errors { display: inline; }

另一个选项,修改Rails设置以在显示错误时更改默认行为:

config.action_view.field_error_proc = Proc.new { |html_tag, instance| "<span class='field_with_errors'>#{html_tag}</span>".html_safe }