I18n表示属性错误

时间:2013-09-20 20:00:32

标签: ruby-on-rails-3 activerecord internationalization rails-i18n

是否有办法做这样的事情:

Model.human_attribute_name :attr

但有错误?

像这样......

Model.human_error_name :attr, :error

例如:

Ticket.human_error_name :ticket_type_id, :no_tickets_left

我希望在我的观点中避免这种情况:

I18n.t("activerecord.errors.models.ticket.attributes.ticket_type_id.no_tickets_left")

1 个答案:

答案 0 :(得分:0)

不是我所知道的,但是很容易将这种方法添加到你的所有模型中:

module Hemju
  module HumanErrorName
    extend ActiveSupport::Concern

    def human_error_name(attr, error)
      I18n.t("activerecord.errors.models.#{self.class.to_s}.attributes.#{attr}.#{error}")
    end
  end
end
ActiveRecord::Base.send(:include, Hemju::HumanErrorName)

在初始化程序中激活扩展程序:

require 'hemju/human_error_name'

现在每个模型都有一个'human_error_name'方法。请记住,每次更改方法时,都必须重新启动服务器。