使用Proc验证



如果我删除下面的||语句,这将工作。知道为什么吗?我希望它只对"社交"one_answers"新闻"以外的类别进行验证

 validates :image, presence: true, if: Proc.new { |a| a.category != "social" || a.category != "news" }

要验证非"社交"和非"新闻"类别,您将需要

validates :image, presence: true, if: Proc.new { |a| a.category != "social" && a.category != "news" }

SeanLi给你的修改是正确的,但请允许我补充一些更深层次的逻辑理解。

这里的困惑可能会通过快速研究民主党的法律来消除。这些是在连接词(and)和析取词(or)上分配否定词的规则。使用Ruby语法:

"Neither p nor q "可以等价地写成!(p || q)!p && !q

同时,"Not both p and q "/"Either not-p or not-q "可以被写成要么是!(p && q)要么是!p || !q

然而,正如它们的英文翻译所表明的那样,第一对的意思与第二对不同(逻辑上不同)。

为了避免过于明显,我们可以通过识别!(p == q)p != q的等价性来将这一事实应用到您的案例中。

相关内容

  • 没有找到相关文章

最新更新