如何在Rails验证错误上突出显示字段

时间:2012-08-31 21:00:53

标签: ruby-on-rails ruby validation validationerror

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

感谢。

3 个答案:

答案 0 :(得分:20)

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

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

这是你想要的吗?

额外here's a section about customizing default ActiveRecord validations 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) %>
[...]

(我可能在那里犯了一个错误 - 我正在写一个电话 - 但你得到了一般的想法。你可以用多种方式编码它=无穷大,所以你喜欢这样做。 ..)

答案 1 :(得分:3)

Rails现在有一个很好的技巧。当error发生时,rails会在错误字段周围放置div.field_with_errors。所以现在你可以定位该类并添加样式。

专注于你可以做的输入

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

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

答案 2 :(得分:0)

我必须这样做(resource.errors [field_name] .length&gt; 0)才能让它工作:

def field_class(resource,field_name)     if resource.errors [field_name] .length&gt; 0       返回“custom_error1”.html_safe     其他       返回“”.html_safe     结束   结束

相关问题