如何突出显示Railsvalidation错误的字段

如何在Rails 3.1中的validation错误失败的字段中显示表单字段突出显示? 我知道脚手架会自动生成css和控制器代码来处理这个问题,但我想知道是否有办法手动生成它。 我已经通过以下方式实现了错误消息的字符串显示:@ user.errors.full_messages.each …等,但是我无法让字段以红色突出显示。 有任何想法吗?

谢谢。

假设您的CSS文件中的字段有错误类:

<% if @user.errors[:name] %> <%= f.label :name, :class => "error" %> <% else %> <%= f.label :name %> <% end %> 

这是你想要的吗?

额外 : 这是关于自定义默认ActiveRecordvalidationCSS的部分。

编辑:( 关于额外的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现在有一个很好的技巧。当出现error时,rails会在错误字段周围放置一个带有.field_with_errors类的div 。 所以现在你可以定位该类并添加样式。

要专注于您可以做的输入

 .field_with_errors input{ border: 1px solid red !important; } 

这个css会在input元素周围放一条漂亮的红线,同时important! 将覆盖任何现有的样式。

我不得不这样做(resource.errors [field_name] .length> 0)让它工作:

def field_class(resource,field_name)如果resource.errors [field_name] .length> 0返回“custom_error1”.html_safe else return“”.html_safe end end