验证模型字段:如果值等于散列中的键

时间:2011-09-20 10:18:39

标签: ruby-on-rails validation constants

在初始化程序中,我有一个巨大的 COUNTRY_CODES 哈希,格式为:

{ :us => "United States, :de => "Germany" }

在我的模型中,我想验证输入的值是:

  • 我国代码哈希的关键

我如何评价这个?

我无法使用:

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES }

我尝试过自定义验证器,但是当值为nil时,我会遇到方法错误,例如当我尝试使用value.to_sym时,导致我验证验证器并且它变得混乱。

试图找出干预最有效的方法。

3 个答案:

答案 0 :(得分:14)

您需要将COUNTRY_CODES键(符号)收集为字符串并验证是否包含。所以使用:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) }

答案 1 :(得分:4)

如果您只想查看哈希中的密钥,请尝试COUNTRY_CODES.keys

答案 2 :(得分:1)

怎么样?

validates :country, :presence => true,
                    :inclusion => { :in => COUNTRY_CODES.keys.map{|c| c.to_s}