使用多个 Proc 对象的验证问题

Validation issue using multiple Proc objects

我对 Proc 进行了验证,但遇到了问题

validates :subcategory, presence: true, 
if: Proc.new {|product| product.detail.blank?} && Proc.new { |product|  product.category.id != 16 }

我的问题是当我在第二个过程中有 true 我的验证触发。

为什么会这样?不应该 return false 因为 false && true=>false?

我认为你最好使用单个过程对象:

validates :subcategory,
  presence: true,
  if: Proc.new { |product| product.detail.blank? && product.category.id != 16 }

我会推荐使用 :if.

中的方法
validates :subcategory, presence: true, if: :my_cond?

def my_cond?
  detail.blank? && category.id != 16
end 

它使您的代码更清晰。如果您为方法 my_cond? 找到了非常好的名称,那么您的代码将更具可读性。

其他人评论了更好的方法来实现你想要的。我只是指出你的误解。

it should return false because false && true => false

没有。实际上,它是 Proc && Proc => Proc (proc1 && proc2 => proc2)。因此,由于 && 运算符的工作方式(这发生在 class 加载时间),您的第一个过程被忽略,并且从未被调用,甚至一次都没有。