Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何访问ActiveModel验证错误的转换密钥?_Ruby On Rails_Ruby On Rails 3_Activemodel - Fatal编程技术网

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"]