Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

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】条件付きバリデーションに関する備忘録

345dvl
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away