像这样的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 :"ホーチミン" %>
<%= f.check_box :city_ids, {multiple: true}, "2", nil %> <%= f.label :"ハノイ" %>
<%= f.check_box :city_ids, {multiple: true}, "3", nil %> <%= f.label :"フエ" %>
<%= f.check_box :city_ids, {multiple: true}, "5", nil %> <%= f.label :"ホイアン" %>
<%= f.check_box :city_ids, {multiple: true}, "7", nil %> <%= f.label :"ニャチャン" %>
<br/>
<%= f.check_box :city_ids, {multiple: true}, "6", nil %> <%= f.label :"ムイネー" %>
<%= f.check_box :city_ids, {multiple: true}, "11", nil %> <%= f.label :"その他" %>
<br/>
<% if @contact.errors[:city_ids].any? %>
<span class="error-explain">
<%= @contact.errors[:city_ids].first %>
</span>
<% end %>
</td>
答案 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 %> ホーチミン
</label>
<label for="contact_ハノイ">
<%= f.check_box :city_ids, {multiple: true}, "2", nil %> ハノイ
</label>
...