错误自动在视图上创建换行符

时间:2014-01-26 06:46:29

标签: ruby-on-rails view checkbox line-breaks

像这样的HTML视图:

□ホーチミン □ハノイ □フエ □ホイアン □その他

我遇到了问题,验证是您必须至少选中一个复选框,因此如果没有选中复选框则会显示错误

当我选择一些复选框时,我的视图看起来没问题

☑ホーチミン ☑ハノイ □フエ □ホイアン □その他

但是当我没有勾选任何复选框时,我的视图会自动创建这样的换行符:

□
ホーチミン 
□
ハノイ 
□
フエ 
□
ホイアン 
□
その他
都市を選択してください

contact.rb:

validate :validate_city_ids
  serialize :city_ids

  def validate_city_ids
    unless city_ids
      errors.add(:city_ids, "都市を選択してください")
    end
  end

在上面这个文件中,如果我删除行:errors.add(:city_ids,“都市を选択してください”)当然如果不显示错误,在本声明中,它不会自动创建换行符< / p>

我的观点如下:

<td>
        <%= f.check_box :city_ids, {multiple: true}, "1", nil %> <%= f.label :"ホーチミン" %> &nbsp;
        <%= f.check_box :city_ids, {multiple: true}, "2", nil %> <%= f.label :"ハノイ" %> &nbsp;
        <%= f.check_box :city_ids, {multiple: true}, "3", nil %> <%= f.label :"フエ" %> &nbsp;
        <%= f.check_box :city_ids, {multiple: true}, "5", nil %> <%= f.label :"ホイアン" %> &nbsp;
        <%= f.check_box :city_ids, {multiple: true}, "7", nil %> <%= f.label :"ニャチャン" %>
        <br/>
        <%= f.check_box :city_ids, {multiple: true}, "6", nil %> <%= f.label :"ムイネー" %> &nbsp;
        <%= f.check_box :city_ids, {multiple: true}, "11", nil %> <%= f.label :"その他" %> &nbsp;
        <br/>
        <% if @contact.errors[:city_ids].any? %>
          <span class="error-explain">
            <%= @contact.errors[:city_ids].first %>
          </span>
        <% end %>
      </td>

1 个答案:

答案 0 :(得分:1)

在检查了整件事之后,这就是问题所在:

Rails将“fields_with_error”div放在复选框周围。有几种可能的方法可以解决这个问题,最简单的方法是将css规则应用于“fields_with_error”

.field_with_errors {
    display: inline;
}

或者通过将此添加到config / application.rb

来更改默认行为
config.action_view.field_error_proc = Proc.new { |html_tag, instance| 
  "#{html_tag}".html_safe 
}

这需要重启应用程序才能生效!它会将fields_with_error div包装在label周围。

在任何情况下,将错误解释范围更改为

<div class="error-explain">
  <%= @contact.errors[:email].first %>
</div>

玩得开心;)

注意:我使用了以下标记:

<label for="contact_ホーチミン">
  <%= f.check_box :city_ids, {multiple: true}, "1", nil %> ホーチミン &nbsp;
</label>
<label for="contact_ハノイ">
  <%= f.check_box :city_ids, {multiple: true}, "2", nil %> ハノイ &nbsp;
</label>
...