3

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

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.blankFailedCar在视图中手动填写缺失的信息。

更新

我认为我需要采用这种方法。我想获取返回的键和选项,以便稍后再次执行翻译。

4

2 回答 2

9

好的,我终于明白了!

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

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

一个非常简单的解决复杂问题的方法:-)

于 2013-07-16T11:25:07.803 回答
0

你也看过(.yml)本地文件吗?您可以将其存储为翻译字符串。更多信息Rails 国际化

于 2013-07-16T11:49:18.093 回答