论坛首页 编程语言技术论坛

rails 可以修改错误信息

浏览 2810 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-09  
今天不忙了,写点关于rails提示错误消息的方法,不完全的
因为默认的错误信息很难看,所以想去掉上面的英文信息,本地化信息
如果有辛能帮助你,甚感荣幸!
首先在rails1.2文档或者网上找到error_messages_for的源码,如下:
120:       def error_messages_for(*params)
121:         options = params.last.is_a?(Hash) ? params.pop.symbolize_keys : {}
122:         objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact
123:         count   = objects.inject(0) {|sum, object| sum + object.errors.count }
124:         unless count.zero?
125:           html = {}
126:           [:id, :class].each do |key|
127:             if options.include?(key)
128:               value = options[key]
129:               html[key] = value unless value.blank?
130:             else
131:               html[key] = 'errorExplanation'
132:             end
133:           end
134:           header_message = "#{pluralize(count, 'error')} prohibited this #{(options[:object_name] || params.first).to_s.gsub('_', ' ')} from being saved"
135:           error_messages = objects.map {|object| object.errors.full_messages.map {|msg| content_tag(:li, msg) } }
136:           content_tag(:div,
137:             content_tag(options[:header_tag] || :h2, header_message) <<
138:               content_tag(:p, 'There were problems with the following fields:') <<
139:               content_tag(:ul, error_messages),
140:             html
141:           )
142:         else
143:           ''
144:         end
145:       end
出现英文信息的是134行和138和139行,其他的不管,就改这三行
首先把134行的header_message引号去掉 改成header_message=""就好了
再到138行把单引号的内容去掉也OK了
139行就是我们在模型里定义的message信息了,不要修改拉
还有一点小提示:
在模型里有validate方法里,默认的是
error_add(:price,"前面的price是字段名,具体信息具体对待,里面这写就是显示在网页里的内容!")
这样的话网页里还会出现"Price"字样,我们可以不需要它
改为
error_add("","djisjdijisdf");
或者
error_add("价格","djisjdijisdf");
好了,就写到这里了,对你有帮助吗?
   发表时间:2007-11-09  
忘记了,把这个东西放在app/application_helper.rb里
最后结果如下: def error_messages_for(*params)
         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
       
           error_messages = objects.map {|object| object.errors.full_messages.map {|msg| content_tag(:li, msg) } }
          content_tag(:div,     
              content_tag(:p, '') <<
               content_tag(:ul, error_messages),
            html
           )
        else
          ''
         end
       end
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics