如何访问ActiveModel验证错误的翻译密钥?

Nie*_*ian 3 ruby-on-rails activemodel ruby-on-rails-3

我有一种情况,我不想在我的数据库中存储验证错误的翻译密钥,而不是它自己的错误消息.想象一下以下情况:

class Car < ActiveRecord::Base
  validates_presence_of :year, :fuel
end

car = Car.new(:fuel => 'Diesel')
car.save!
#=> ActiveRecord::RecordInvalid
Run Code Online (Sandbox Code Playgroud)

现在,如果我打电话:

car.errors
#=> :year=>["can't be blank"]
Run Code Online (Sandbox Code Playgroud)

我收到翻译的错误消息.

相反,我想提取生成它的翻译键(在这种情况下,我认为它会是这样的errors.messages.blank),所以我可以将它存储在我的数据库中的不同模型中,例如FailedCar我以后可以生成一个I18n自定义表单在视图中手动填写缺失的信息.

UPDATE

我认为这是这个方法,我需要挂接到.我想获取密钥和返回的选项,因此我可以在以后再次执行翻译.

Nie*_*ian 9

好的,我终于明白了!

解决方案不是修补或在轨道上做任何事情 - 相反 - 答案在于I18n宝石.

I18n,rails用于标准的翻译,能够插入新的后端,为其提供更大的灵活性.在这种情况下,称为元数据的后端完全符合我的需要.添加I18n::Backend::Simple.include(I18n::Backend::Metadata)到初始化程序时,它允许我通过添加方法调用直接从错误消息字符串中提取所有与翻译相关的信息translation_metadata.

一个复杂问题的简单解决方案:-)