引用
在models添加validates_xxx方法后,页面的出错信息标题如何更改默认呢?
比如红色框的标题是
1 error prohibited this customer from being saved
还有就是我更改了environment.rb中的ActiveRecord::Errors.default_error_messages,例如::blank => "不能为空",但是错误提示中显示的字段名仍然是英文,例如:“Name 不能为空”,请问“Name”如何更改为我希望的名称呢?
比如红色框的标题是
1 error prohibited this customer from being saved
还有就是我更改了environment.rb中的ActiveRecord::Errors.default_error_messages,例如::blank => "不能为空",但是错误提示中显示的字段名仍然是英文,例如:“Name 不能为空”,请问“Name”如何更改为我希望的名称呢?
我的解决方案是,在app/helpers/application_helper.rb里重写rails的error_messages_for函数:
def error_messages_for(object_name, options = {}) options = options.symbolize_keys object = instance_variable_get("@#{object_name}") if object && !object.errors.empty? content_tag("div", content_tag( options[:header_tag] || "h2", "保存该#{object.class::ALIAS}时发生#{object.errors.count}个错误。" ) + content_tag("ul", object.errors.collect { |attr, msg| content_tag("li", object.class::COLUMN_ALIASES[attr] + msg) }), "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation" ) else "" end end
请注意这里面的两个ALIAS,一个是object.class::ALIAS,一个是object.class::COLUMN_ALIASES[attr]。就用你的例子来说明这两个alias:
class Customer < ActiveRecord::Base ALIAS = '客户' COLUMN_ALIASES = { 'name' => '客户名称', 'address' => '地址' # some other columns } # other codes in this model end
这样的话,再加上你在environment.rb中设置的ActiveRecord::Errors.default_error_messages,他的报错信息就会是:
保存该客户时发生2个错误。
* 客户名称不能为空。
* 地址不能为空。
今天看到一个很好的i18n/l10n的Ruby库: gibberish。这是一个很干净,很ruby的实现方式,也许用它可以有更好的解决方法。