Rails 3 - 验证两个字段之一已完成

时间:2011-07-14 14:29:02

标签: ruby-on-rails ruby-on-rails-3 validation model

我正在编写一个Rails应用程序来管理我们网站顶部的一系列横幅;每个人都应链接到编辑器提供的URL或从下拉列表中选择的特定产品。

我想在模型中进行某种验证,以便与其他检查保持一致,这样可以确保在保存时提供了一个(但不是两个)字段(产品ID或URL)。

是否有validates类型的方式来检查这个,或者我是否必须将此检查放在控制器的某处?

2 个答案:

答案 0 :(得分:18)

这是模型中非常直接的验证:

validate :check_consistency

def check_consistency
  if product_id.blank? and url.blank?
   #one at least must be filled in, add a custom error message
   return false
  elsif !product_id.blank? and !url.blank?
   #both can't be filled in, add custom error message
   return false
  else
   return true
  end
end

答案 1 :(得分:6)

上面的类似答案,但这只是一个独家或if if语句不需要

validate :check_consistency
def check consistency
  errors.add(:base, 'message') if product_id.blank? ^ url.blank?
end