可定制的Rails错误回显

通常rails页面的错误信息提示都是放在首部用 error_message_for,生成这样的错误提示:
可定制的Rails错误回显

这样很快就把所有错误信息都显示出来了。但是有一个缺点,就是灵活性太差。感觉error_message_for就像rails的scaffold一样可以快速搭建一个curd应用,但是定制性不高。

还好,rails的可扩展能力是很强的,你不喜欢里面的某一方法,你甚至可以去把他的源代码改了(当然不推荐这样做...),所以只有自己动手..

看了下源码:

# Returns the Errors object that holds all information about attribute error messages.
    def errors
      @errors ||= Errors.new(self)
   end


这一句就够了:原来每个ActiveRecord的实例都有一个errors方法。这个@errors就是所有rails其他错误信息处理封装的基础。

自己写了一个对每个model的field错误信息提取到div的方法,同时把汉化也加进去了,很简单。。
module ApplicationHelper
  def error_div(model, field, field_name)
    return unless model
    field = field.is_a?(Symbol) ? field.to_s : field
    errors = model.errors[field]
    return unless errors
    %Q(
    <div class="errors">
    #{errors.is_a?(Array) ? errors.map{|e| field_name + e}.join(",") : field_name << errors}
    </div>
    )
  end
end



demo:
validation:
class Post < ActiveRecord::Base
  validates_presence_of :title, :message => "不能为空"
  validates_length_of   :title, :in => 2..10, :message => "长度不正确"
end


view:

<% form_for(@post) do |f| %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %><%= error_div(@post, :title, "标题")%>
  </p>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>


效果1:
可定制的Rails错误回显
效果2:
可定制的Rails错误回显


你可能感兴趣的:(Ajax,css,Ruby,Rails,ActiveRecord)