如果我删除下面的||语句,这将工作。知道为什么吗?我希望它只对"社交"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
的等价性来将这一事实应用到您的案例中。