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