我已对Proc
进行验证并遇到问题
validates :subcategory, presence: true,
if: Proc.new {|product| product.detail.blank?} && Proc.new { |product| product.category.id != 16 }
我的问题是当我在第二次进程中true
时,我的验证会被激活。
为什么会这样?它是否应该返回false
,因为false && true=>false
?
答案 0 :(得分:5)
我认为您最好使用单个proc对象:
validates :subcategory,
presence: true,
if: Proc.new { |product| product.detail.blank? && product.category.id != 16 }
答案 1 :(得分:4)
其他人评论了更好的方法来实现你想要的东西。我只是指出你的误解。
它应该返回
false
,因为false && true => false
不。实际上,它是Proc && Proc => Proc
(proc1 && proc2 => proc2
)。因此,由于&&
运算符的工作方式(这发生在类加载时),您的第一个proc被忽略,并且永远不会被调用,甚至不会被调用。
答案 2 :(得分:2)
我建议使用以下方法:if。
validates :subcategory, presence: true, if: :my_cond?
def my_cond?
detail.blank? && category.id != 16
end
它使您的代码更清晰。如果你找到方法my_cond?
的真正好名字,那么你的代码将更具可读性。