子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評(píng)論 - 915, 引用 - 0
          數(shù)據(jù)加載中……

          error_messages_for的中文化

          在Rails中error_messages_for為國際化的考慮不是很周全,它顯示的是模型的字段名稱,這對(duì)于用戶來說是不友好的。為了解決這個(gè)問題,只能改它的源碼了----將如下方法,放入ApplicationHelper
          文/陳剛? www.chengang.com.cn? 轉(zhuǎn)載請(qǐng)聲明出處

          ? def?error_messages_for(*params)
          ????
          #add?by?glchengang
          ????key_hash?=?{}
          ????
          if?params.first.is_a?(Hash)
          ??????key_hash?
          =??params.first
          ??????params
          .delete_at(0)
          ????end
          ????
          #add?end

          ????options?
          =?params.last.is_a?(Hash)???params.pop.symbolize_keys?:?{}
          ????objects?
          =?params.collect?{|object_name|?instance_variable_get("@#{object_name}")?}.compact
          ????count???
          =?objects.inject(0)?{|sum,?object|?sum?+?object.errors.count?}
          ????
          unless?count.zero?
          ??????html?
          =?{}
          ??????[
          :id,?:class].each?do?|key|
          ????????
          if?options.include?(key)
          ??????????value?
          =?options[key]
          ??????????html[key]?
          =?value?unless?value.blank?
          ????????
          else
          ??????????html[key]?
          =?'errorExplanation'
          ????????end
          ??????end
          ??????
          #?change?by?glchengang
          ??????header_message?=?"有#{count}個(gè)錯(cuò)誤"
          #???????header_message?=?"#{pluralize(count,?'error')}?prohibited?this?#{(options[:object_name]?||?params.first).to_s.gsub('_',?'?')}?from?being?saved"
          ??????
          ??????#add?by?glchengang

          ??????error_messages?=?objects.map?do?|object|
          ????????temp?
          =?[]
          ????????object
          .errors.each?do?|attr,?msg|
          ??????????temp?
          <<?content_tag(:li,?(key_hash[attr]?||?attr)?+?msg)?
          ????????end
          ????????temp
          ??????end
          ??????
          #add?end

          #????????error_messages?=?objects.map?{|object|?object.errors.full_messages.map?{|msg|?content_tag(:li,?msg)?}?}

          ??????content_tag(:div,
          ????????content_tag(options[
          :header_tag]?||?:h2,?header_message)?<<
          #???????????content_tag(:p,?'There?were?problems?with?the?following?fields:')?<<
          ??????????content_tag(:ul,?error_messages),
          ????????html
          ??????)
          ????
          else
          ??????
          ''
          ????end
          ??end


          使用依然兼容老的方式,你也可以傳入一個(gè)哈希表,把模型字段顯示成對(duì)應(yīng)的中文,示例如下:
          <%=?
          h?
          =?{'username'=>'用戶名',?'password'=>'密碼'}
          error_messages_for?h
          ,?:user
          %>

          另外,還要在environment.rb的最后插入以下代碼:

          errors?=?ActiveRecord::Errors.default_error_messages
          errors[
          :taken]?=?'已經(jīng)被使用'
          errors[
          :blank]?=?'不能為空'

          posted on 2007-09-19 17:35 陳剛 閱讀(1837) 評(píng)論(0)  編輯  收藏 所屬分類: Rails&Ruby

          主站蜘蛛池模板: 武功县| 宜州市| 天台县| 和田县| 高州市| 新丰县| 高邮市| 涪陵区| 宁海县| 乌鲁木齐市| 洪湖市| 祁连县| 临城县| 松原市| 上虞市| 西平县| 柘荣县| 海阳市| 竹山县| 九江市| 北宁市| 肇源县| 林甸县| 马边| 余庆县| 仁化县| 南汇区| 三都| 宁乡县| 天津市| 富顺县| 仁化县| 石楼县| 古蔺县| 天镇县| 永顺县| 台中县| 永平县| 石柱| 隆回县| 得荣县|