Ruby on rails 如何访问ActiveModel验证错误的转换密钥?
我有一种情况,我不想在我的数据库中存储验证错误的翻译密钥,而不是错误消息本身。想象一下以下情况:Ruby on rails 如何访问ActiveModel验证错误的转换密钥?,ruby-on-rails,ruby-on-rails-3,activemodel,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 我得到了翻译后的错误消息 取而代之的是,我想提取将生成此代码的翻译键(在本例中,我认为
class Car < ActiveRecord::Base
validates_presence_of :year, :fuel
end
car = Car.new(:fuel => 'Diesel')
car.save!
#=> ActiveRecord::RecordInvalid
我得到了翻译后的错误消息
取而代之的是,我想提取将生成此代码的翻译键(在本例中,我认为它类似于errors.messages.blank
),因此,我可以将其存储在不同型号的数据库中,例如,FailedCar
,以便稍后生成I18n自定义表单,用于在视图中手动填写缺失的信息
更新
我认为这是我需要采用的方法。我想获取返回的密钥和选项,以便稍后再执行翻译。好的,我终于找到了
解决方案不是在rails方面进行修补或做任何事情-而是-答案在于I18n
gem
rails标准使用的I18n可以插入新的后端以提供更大的灵活性。在本例中,调用的后端正是我所需要的。在向初始值设定项添加I18n::Backend::Simple.include(I18n::Backend::Metadata)
时,通过添加方法调用translation\u Metadata
,可以直接从错误消息字符串中提取所有与翻译相关的信息
一个非常简单的解决复杂问题的方法:-)您也看过(.yml)本地文件了吗?可以将其存储为翻译字符串。查看更多信息。这太好了!谢谢
car.errors
#=> :year=>["can't be blank"]