はじめに
プログラミングを勉強して2か月半ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。
今回はオリジナルアプリでどちらか一方必須のバリデーションを設定したので、その方法について共有したいと思います。
Let's start!!!
今回、私のオリジナルアプリでは、ユーザーがアイテムを投稿する際に、PDFまたは画像のどちらか一方が必須であるバリデーションを設定しました。さらに、両方が入力されている場合も、一方も入力されていない場合も保存を許可しないように設定しました。
それでは、実装していきましょう!
モデルへの記述
class Item < ApplicationRecord
validate :image_or_pdf
def image_or_pdf
return if item_image.present? ^ pdf.present?
errors.add(:base, '画像またはPDFのどちらか一方を入力してください')
end
end
この例では、カスタムバリデーションを作成しています。
return if item_image.present? ^ pdf.present?
この記述でどちらか一方を設定しています。
この記述の中でのポイントは^
です。
^
は排他的論理はというものです。
※排他的論理和とは、ブール論理や古典論理、ビット演算などにおいて、2つの入力のどちらか片方が真でもう片方が偽の時には結果が真となり、両方とも真あるいは両方とも偽の時は偽となる演算(論理演算)である。XOR、EOR、EX-OR(エクスオア、エックスオア、エクソア)などと略称される。 wikipediaより引用
つまり、PDFか画像のどちらかの値があればtrue、PDFと画像のどちらも入力されている場合や入力されていない場合はfalseを返します。
もう一つのポイントは、validate :image_or_pdf
です。
みなさん気づいていると思いますが、普段のバリデーションの設定時と少し違うところがあります。
validates
ではなくvalidate
になっています。
今回のようにバリデーションをカスタムした場合はvalidate
と記述する必要があります。
終わりに
今回はどちらか一方必須のバリデーションの設定方法を共有させて頂きました。
このようにバリデーションをカスタムすることができれば、オリジナルアプリの作成にも幅が広がりそうです。
みなさんのお役に立てていれば幸いです!
今回も最後まで読んでいただきありがとうございました!