在 Rails 3.1 中,如何为未通过验证错误的字段显示表单字段突出显示?我知道脚手架会自动生成 css 和控制器代码来处理这个问题,但我想知道是否有办法手动生成它。我已经通过@user.errors.full_messages.each ...等实现了错误消息的字符串显示,但我无法让这些字段以红色突出显示。有任何想法吗?
谢谢。
在 Rails 3.1 中,如何为未通过验证错误的字段显示表单字段突出显示?我知道脚手架会自动生成 css 和控制器代码来处理这个问题,但我想知道是否有办法手动生成它。我已经通过@user.errors.full_messages.each ...等实现了错误消息的字符串显示,但我无法让这些字段以红色突出显示。有任何想法吗?
谢谢。
假设您的 CSS 文件中的字段有一个错误类:
<% if @user.errors[:name] %>
<%= f.label :name, :class => "error" %>
<% else %>
<%= f.label :name %>
<% end %>
这是你想要的吗?
额外:这是关于自定义默认 ActiveRecord 验证 CSS 的部分。
编辑:( 关于额外的ifs)
# app/helpers/application_helper.rb
def field_class(resource, field_name)
if resource.errors[field_name]
return "error".html_safe
else
return "".html_safe
end
end
接着:
# in your view
<%= f.label :name, :class => field_class(@user, :name) %>
<%= f.label :password, :class => field_class(@user, :password) %>
[...]
(我可能在那里犯了一个错误 - 我正在用电话写 - 但你明白了。你可以用多种方式编码这个 = 无穷大,所以按照你喜欢的方式去做......)
Rails 现在有一个很好的技巧。当发生错误时,rails 会在错误字段周围error
放置div
一个类。.field_with_errors
所以现在你可以定位那个类并添加样式。
要专注于输入,您可以做
.field_with_errors input{
border: 1px solid red !important;
}
input
这个 CSS 将在元素周围放置一条漂亮的红线,同时important!
会覆盖任何现有样式。
我必须这样做 (resource.errors[field_name].length > 0) 才能让它工作:
def field_class(resource, field_name) if resource.errors[field_name].length > 0 return " custom_error1 ".html_safe else return "".html_safe end end