验证包含在可用的区域设置中

时间:2014-05-08 11:56:09

标签: ruby-on-rails ruby

我的Company模式下有一个数据库字段,用于指定公司的区域设置。我想验证它的值是否包含在I18n的可用语言环境中,并且我发现Rails的包含验证适合此任务。

但是当我使用

class Company < ActiveRecord::Base
  validates :locale, inclusion: { in: I18n.available_locales.map { |l| l.to_s } }
end

map调用是因为I18n.available_locales返回一个符号数组,而不是字符串,所以我们需要在这里转换它们。

当我从Rails控制台调用de时可用的语言环境I18n.available_locales 无效。我该怎么办?

1 个答案:

答案 0 :(得分:2)

这里的问题是I18n.available_locales在加载Company类时被评估一次。显然,当时并非所有语言环境都可用。您需要做的是动态调用available_locales,然后使用 proc 执行此操作:

validates :locale, inclusion: { in: proc { I18n.available_locales.map { |l| l.to_s } }

这将在运行时进行评估,您的所有语言环境都将可用。