1

如果我删除 || 下面的声明将起作用。任何想法为什么?我希望它仅在“社交”和“新闻”以外的类别上进行验证

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

2 回答 2

1

要验证不是“社交”和“新闻”的类别,您需要

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

于 2013-01-03T20:05:52.613 回答
1

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

对德摩根定律的快速研究可能会消除这里的困惑。这些是在连词 (AND) 和析取 (OR) 上分配否定 (NOT) 的规则。使用 Ruby 语法:

“既不p也不q”可以等价地写为要么!(p || q)!p && !q

同时,“Not both pand q” / “Either not-por not-q” 可以等价地写为 any !(p && q)or !p || !q

然而,正如他们的英文翻译清楚地表明,第一对意味着不同的东西(在逻辑上与第二对不同)。

冒着对显而易见的事情进行描述的风险,这个事实可以通过识别 和 的等价性应用于您的!(p == q)案例p != q

于 2013-01-03T22:31:25.297 回答