LoginSignup
0
0

More than 3 years have passed since last update.

【Rails】投稿機能で本文・画像いずれかを必須とするバリデーション

Posted at

SNSアプリで本文と合わせて画像も投稿できる機能を実装する際、本文の入力必須というバリデーションは画像投稿が無い場合のみ適用したい(=画像のみの投稿も可能)、という場合があると思います。
そのような時のバリデーションの書き方で少し嵌ったため、備忘録も兼ねて記載します。

前提

  • 画像投稿機能はActiveStorageを使用
  • 画像投稿における他のバリデーション(ファイル形式・サイズ・枚数制限)は他の方の記事で詳しい解説があるため省略

バリデーション

以下、Postsモデルのtextカラムにバリデーションを設定します。

app/models/post.rb
has_many_attached :images  # ActiveStorageで複数画像投稿を可能にするための一文
validates :text, presence: true, unless: Proc.new {images.attached?}

unless: images.attached?と書きたくなるのですが、バリデーションにおける条件文の引数に指定できるのはシンボル、ProcArrayのみのため、上記のような記述となります。
メソッドを定義してシンボルで呼び出す、というやり方も可能ですが、この程度なら一行で記述したいですね。

参考記事

【Rails】条件付きバリデーションに関する備忘録

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