如果我删除 || 下面的声明将起作用。任何想法为什么?我希望它仅在“社交”和“新闻”以外的类别上进行验证
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" }
要验证不是“社交”和“新闻”的类别,您需要
validates :image, presence: true, if: Proc.new { |a| a.category != "social" && a.category != "news" }
SeanLi 给了你一个正确的修改,但请允许我补充一些更深层次的逻辑理解。
对德摩根定律的快速研究可能会消除这里的困惑。这些是在连词 (AND) 和析取 (OR) 上分配否定 (NOT) 的规则。使用 Ruby 语法:
“既不p
也不q
”可以等价地写为要么!(p || q)
或!p && !q
。
同时,“Not both p
and q
” / “Either not-p
or not-q
” 可以等价地写为 any !(p && q)
or !p || !q
。
然而,正如他们的英文翻译清楚地表明,第一对意味着不同的东西(在逻辑上与第二对不同)。
冒着对显而易见的事情进行描述的风险,这个事实可以通过识别 和 的等价性应用于您的!(p == q)
案例p != q
。