|| を削除すると この下のステートメントは機能します。理由はありますか?「ソーシャル」と「ニュース」以外のカテゴリでのみ検証したい
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 はあなたに正しい修正を与えましたが、より深い論理的理解で補足させてください。
ここでの混乱は、おそらく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
。
「ソーシャル」でも「ニュース」でもないカテゴリで検証するには、
validates :image, presence: true, if: Proc.new { |a| a.category != "social" && a.category != "news" }