1

|| を削除すると この下のステートメントは機能します。理由はありますか?「ソーシャル」と「ニュース」以外のカテゴリでのみ検証したい

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

2 に答える 2

1

SeanLi はあなたに正しい修正を与えましたが、より深い論理的理解で補足させてください。

ここでの混乱は、おそらくDeMorgan's Lawsを簡単に調べれば解消されるでしょう。これらは、論理積 (AND) および論理和 (OR) に否定 (NOT) を分配するための規則です。Ruby 構文の使用:

「どちらpでもない」は、どちらかまたはqのように同等に書くことができます。!(p || q)!p && !q

一方、「両方pではないq」/「いずれかnot-pまたは」は、どちらかまたはnot-qのように同等に書くことができます。!(p && q)!p || !q

ただし、英語の表現が明らかにするように、最初のペアは、2 番目のペアとは異なる (論理的に異なる) 何かを意味します。

!(p == q)明白なことを長引かせる危険を冒すために、との同等性を認識することで、この事実をケースに適用できますp != q

于 2013-01-03T22:31:25.297 に答える
1

「ソーシャル」でも「ニュース」でもないカテゴリで検証するには、

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

于 2013-01-03T20:05:52.613 に答える