0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby on rails】どちらか一方必須のバリデーション

Posted at

はじめに

プログラミングを勉強して2か月半ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。

今回はオリジナルアプリでどちらか一方必須のバリデーションを設定したので、その方法について共有したいと思います。

Let's start!!!

今回、私のオリジナルアプリでは、ユーザーがアイテムを投稿する際に、PDFまたは画像のどちらか一方が必須であるバリデーションを設定しました。さらに、両方が入力されている場合も、一方も入力されていない場合も保存を許可しないように設定しました。

それでは、実装していきましょう!

モデルへの記述

item.rb
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と記述する必要があります。

終わりに

今回はどちらか一方必須のバリデーションの設定方法を共有させて頂きました。
このようにバリデーションをカスタムすることができれば、オリジナルアプリの作成にも幅が広がりそうです。
みなさんのお役に立てていれば幸いです!

今回も最後まで読んでいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?