如何在ActiveRecord验证中检查值是否包含在哈希表中?

3
我有一个名为Project的模型,并且我需要测试billing_address_type是否有效。
class Project < ActiveRecord::Base

  validates :billing_address_type, :inclusion  => { :in => %w(h o) }

  def billing_address_types
    options = {"Home" => "h", "Organisation" => "o"}       
    if person.present?
      options.delete("Home") if person.address.blank?
      options.delete("Organisation") if person.organisation.blank?
    end
    options
  end

然而,validates这行代码是错误的。我需要检查是否包含由方法billing_address_types返回的哈希值。

我该如何仅检查哈希值?

感谢任何帮助...


如果我理解正确,您需要 has_value? 方法。 - Konstantin Ilchenko
1个回答

3
您可以将 lambda 或新的 Proc 传递给 :in 选项,该选项将被动态评估,并使用从 billing_address_types 返回的哈希中的 values 方法仅获取哈希值。
validates :billing_address_type, :inclusion  => { :in => lambda { |a| a.class.billing_address_types.values } }

详细信息请参见文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接