Rails验证是否存在两个或多个实体

时间:2014-02-21 07:21:31

标签: ruby-on-rails validation activerecord

我的名字有两列,

product_available_count( 整数 )和product_available_on( 日期

我需要对这些列执行模型级验证。

验证应检查如果 product_required 为true,则应填充 字段。

当产品经理填写目录时,我们需要执行模型级别验证,以检查他是否应填写任一字段。

建议我为我的要求编写自定义验证的任何优雅方式。

我尝试过这种方法

validates :product_available_count_or_product_available_on if product_required?

def product_available_count_or_product_available_on
  //logic ???
end

自定义验证是我的要求的唯一方法。我可以使用Proc或任何其他方法编写更好的代码。

1 个答案:

答案 0 :(得分:1)

我认为自定义验证是解决此类问题的最佳方法

validate :product_available_count_or_product_available_on if product_required?

def product_available_count_or_product_available_on
  if [product_available_count, product_available_on].compact.blank.size == 0
    errors[:base] << ("Please select alteast one.")
  end
end      

但如果您真的不想编写自定义验证,请尝试使用

validates :product_available_count, :presence => { :if =>  product_required? && product_available_on.blank? }
validates :product_available_on, :presence => { :if =>  product_required? && product_available_count.blank? }