在验证失败后未添加类field_with_errors的div包装器

时间:2016-06-06 16:48:22

标签: ruby-on-rails ruby twitter-bootstrap

我正在使用bootstrap-sass宝石。我有一个验证,需要选择一个选择框。

这是选择框:

select box

验证指定必须进行选择(但它include_blank,以便选择框开始为空)。在验证失败后,它应该是什么样子:

failing validation style

Rails应该创建一个包含输入标签的div,并选择包含类field_with_errors的框。但是,无论出于何种原因:rails不会使用这些选择框执行此操作。它适用于我的表单的文本框,但不是选择框。

我可以使用field_with_errors类手动添加div包装器,它可以正常工作。所以看起来问题是rails只是没有用该类创建div包装器。

以下是表格的相关部分:

<div class= 'row'>
  <div class="form-group col-sm-4">
    <%= f.label :foo_id, class:'control-label' do %>
      <i class="fa fa-asterisk label_required"></i>
      Expense Type
    <% end %>
    <%= f.collection_select :foo_id, Foo.all, :id, :description, {include_blank: true}, class: 'form-control' %>
  </div>
</div>

问题:我怎样才能使验证失败时,rails会将带有field_with_errors类的div包装器添加到我的无效collection_select字段中?

1 个答案:

答案 0 :(得分:2)

问题在于我如何命名validation。假设表单适用于bar模型,我在collection_select上有foo

#models/bar.rb
class Bar < ApplicationRecord
  belongs_to :foo

  validates :foo_id, presence: true
end

我以前有这样的验证:

validates :foo, presence: true

验证foo而不是正确验证foo_id使其正确失败并显示错误消息,但rails无法使用field_with_errors添加div包装器。通过验证foo_id它正确验证,显示错误消息,并添加div包装。