我有以下型号。
class Ingredient < ActiveRecord::Base
UNITS = [
{ name: "Unit" },
{ name: "Teaspoon" }
]
validates :unit, inclusion: UNITS.map{|u| I18n.t(u[:name]) }
end
在控制台中。在语言环境if:fr(french)时运行以下命令,根据我的语言环境文件生成以下命令。
#Ingredient::UNITS.map{ |u| I18n.t(u[:name]) }
["Unité","Cuillère à café",]
哪个是正确的,但是当我执行以下操作时,验证失败了。
Ingredient.create(quantity: 4.0, unit: "Cuillère à café")
当我手动检查单元是否包含在阵列中时,我得到了真实。为什么验证失败?适用于英语。
答案 0 :(得分:2)
验证程序是在第一次加载类时定义的,以后不再更改。在您的示例中,这意味着
validates :unit, inclusion: UNITS.map{|u| I18n.t(u[:name]) }
评估为
validates :unit, inclusion: ['Unit', 'Teaspoon']
并且不会在以后的请求中更改为其他语言环境。
可能会在数组上分配一个lambda,如下所示:
validates :unit, inclusion: { in: proc { UNITS.map { |u| I18n.t(u[:name]) } } }