我有一种情况,我不想在我的数据库中存储验证错误的翻译密钥而不是自己的错误消息。想象一下以下情况:
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方法。我想获取密钥和返回的选项,因此我可以在以后再次执行翻译。
答案 0 :(得分:9)
好的,我终于明白了!
解决方案不是修补或做任何东西 - 而是 - 答案在于I18n
宝石。
I18n::Backend::Simple.include(I18n::Backend::Metadata)
添加到初始化程序时,通过添加方法调用translation_metadata
,我可以直接从错误消息字符串中提取所有与翻译相关的信息。
解决复杂问题的简单解决方案: - )
答案 1 :(得分:0)
您是否也查看过(.yml)本地文件?您可以将其存储为翻译字符串。有关详情Rails Internationalization。