如何在缺少模型属性转换时引发错误

时间:2015-02-12 01:44:11

标签: ruby-on-rails internationalization

目前,当某些任意转换缺失时,rails将按照I18n::MissingTranslationData的配置抛出config.action_view.raise_on_missing_translations = true。但是,如果缺少某些模型属性的翻译,它会默默地将密钥“转换”为该单词。

e.g。 activerecord.attributes.user.first_name被“翻译”为First name

有没有办法强制rails在每个缺失的翻译中抛出异常,包括这个

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并在这篇文章中找到了解决方案:https://stackoverflow.com/a/22191491/410996

您可以修补human_attribute_name方法以引发错误。将此代码放在初始化程序中:

require 'active_support/core_ext/hash/reverse_merge'

module ActiveModel
  module Translation
    include ActiveModel::Naming

    def human_attribute_name(attribute, options = {})
      defaults = lookup_ancestors.map do |klass|
        [:"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}",
         :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key.to_s.tr('.', '/')}.#{attribute}"]
      end.flatten

      defaults << :"attributes.#{attribute}"
      defaults << options.delete(:default) if options[:default]
      defaults << attribute.to_s.humanize if Rails.env.production? # Monkey patch

      options.reverse_merge! :count => 1, :default => defaults
      I18n.translate(defaults.shift, options)
    end
  end
end