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

时间:2013-07-15 16:08:33

标签: ruby-on-rails ruby-on-rails-3 activemodel

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

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

car = Car.new(:fuel => 'Diesel')
car.save!
#=> ActiveRecord::RecordInvalid

现在,如果我打电话:

car.errors
#=> :year=>["can't be blank"]

我收到翻译的错误消息。

相反,我想提取生成此内容的翻译密钥(在这种情况下,我认为它类似于errors.messages.blank),因此我可以将其存储在我的数据库中的不同模型中,例如FailedCar所以我稍后可以生成一个I18n自定义表单,用于在视图中手动填写缺失的信息。

更新

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

2 个答案:

答案 0 :(得分:9)

好的,我终于明白了!

解决方案不是修补或做任何东西 - 而是 - 答案在于I18n宝石。

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

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

答案 1 :(得分:0)

您是否也查看过(.yml)本地文件?您可以将其存储为翻译字符串。有关详情Rails Internationalization