自定义rails中的error_messages_for方法输出内容

  1. def error_messages_for(*params)   
  2.     #add by glchengang   
  3.     key_hash = {}   
  4.     if params.first.is_a?(Hash)   
  5.       key_hash =  params.first   
  6.       params.delete_at(0)   
  7.     end   
  8.     #add end   
  9.   
  10.     options = params.last.is_a?(Hash) ? params.pop.symbolize_keys : {}   
  11.     objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact   
  12.     count   = objects.inject(0) {|sum, object| sum + object.errors.count }   
  13.     unless count.zero?   
  14.       html = {}   
  15.       [:id:class].each do |key|   
  16.         if options.include?(key)   
  17.           value = options[key]   
  18.           html[key] = value unless value.blank?   
  19.         else  
  20.           html[key] = 'errorExplanation'  
  21.         end   
  22.       end   
  23.       # change by glchengang   
  24.       header_message = "有#{count}个错误"  
  25.       # header_message = "#{pluralize(count, 'error')} prohibited this #{(options[:object_name] || params.first).to_s.gsub('_', ' ')} from being saved"  
  26.          
  27.       #add by glchengang   
  28.       error_messages = objects.map do |object|   
  29.         temp = []   
  30.         object.errors.each do |attr, msg|   
  31.           temp << content_tag(:li, (key_hash[attr] || attr) + msg)    
  32.         end   
  33.         temp   
  34.       end   
  35.       #add end   
  36.   
  37.       # error_messages = objects.map {|object| object.errors.full_messages.map {|msg| content_tag(:li, msg) } }   
  38.       content_tag(:div,   
  39.         content_tag(options[:header_tag] || :h2, header_message) <<   
  40.         # content_tag(:p, 'There were problems with the following fields:') <<   
  41.           content_tag(:ul, error_messages),   
  42.         html   
  43.       )   
  44.     else  
  45.       ''  
  46.     end   
  47.   end  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值