rails errors样式自定义

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

image

 

这样很快就把所有错误信息都显示出来了。但是有一个缺点,就是灵活性太差。感觉error_message_for就像rails的scaffold一样可以快速搭建一个CURD(增删改查)应用,但是定制性不高。
还好,rails的可扩展能力是很强的,你不喜欢里面的某一方法,你甚至可以去把他的源代码改了(当然不推荐这样做...),所以只有自己动手..

 

看了下源码:

?
1
2
3
4
    # Returns the Errors object that holds all information about attribute error messages. 
         def errors 
           @errors ||= Errors. new ( self
        end
?
1
  

这一句就够了:原来每个ActiveRecord的实例都有一个errors方法。这个@errors就是所有rails其他错误信息处理封装的基础。
自己写了一个对每个model的field错误信息提取到div的方法,同时把汉化也加进去了,很简单。。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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
?
1
  

demo:
validation:

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

 

view:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<% form_for( @post ) do |f| %>  
 
   <p>  
     <%= f.label :title %><br />  
     <%= f.text_field :title %><%= sanitize(error_div( @post , :title , "标题" ))%>  
   </p>  
   <p>  
     <%= f.label :description %><br />  
     <%= f.text_area :description %>  
   </p>  
   <p>  
     <%= f.submit 'Create' %>  
   </p>  
<% end %>

 

效果1:
image
效果2:
image

转载于:https://www.cnblogs.com/feichan/archive/2011/12/07/2280002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值