Re: [问题]关于验证后出错的显示

阅读更多
seairy在论坛里问:
引用
在models添加validates_xxx方法后,页面的出错信息标题如何更改默认呢?

比如红色框的标题是
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的实现方式,也许用它可以有更好的解决方法。

你可能感兴趣的:(Ruby,ActiveRecord,Rails)