validationが効いているのに、エラーメッセージが表示されない

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

エラーメッセージが表示されない

講義とは異なるrailsのバージョンで課題を進めていたところ、仕様が変わっているところが多々あったので備忘録として残します


開発環境

  • ruby 3.2.5
  • rails 7.2.1
  • MacOS sonoma 14.5

validationは設定済み

validationでは、presencelengthを制限済み

class Task < ApplicationRecord
  validates :title, presence: true
  validates :title, length: { minimum: 2, maximum: 15 }

  validates :description, presence: true
  validates :description, length: { minimum: 2, maximum: 100 }
end

エラーメッセージも設定済み

エラーメッセージの設定もしてある

  def create
    @task = @board.tasks.build(task_params)
    @task.user = current_user
    if @task.save
      redirect_to board_tasks_path(@task.board),
                  notice: 'Taskを追加しました'
    else
      flash.now[:error] = 'Taskの追加に失敗しました'
      render :new
    end
  end

なにも表示されない

validationが効いているから保存はされていない

でも、flash.now[:error]のメッセージも、varidationエラーのメッセージも出てこない


理由はrails7.0の「Turbo Streams」

調べたところ、rails7.0に入っている「Turbo Streams」が理由らしい

そこで、解決策がこちら↓

  def create
    @task = @board.tasks.build(task_params)
    @task.user = current_user
    if @task.save
      redirect_to board_tasks_path(@task.board),
                  notice: 'Taskを追加しました'
    else
      flash.now[:error] = '追加に失敗しました'
      render :new, status: :unprocessable_entity # ←
    end
  end

status: :unprocessable_entityを追加すると解決するらしい


表示された!!

(アニメーションつけてたから、「追加に失敗しました」が消えかけ)


おまけ

あまりにもエラーメッセージが表示されないから試行錯誤してるとき

↓みたいに「!」をつけてみたんだけど、これもエラーメッセージが表示されない理由でした

if @task.save!
if @task.update!(task_params)

#「!」は不要でした