※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
エラーメッセージが表示されない
講義とは異なるrailsのバージョンで課題を進めていたところ、仕様が変わっているところが多々あったので備忘録として残します
- ruby 3.2.5
- rails 7.2.1
- MacOS sonoma 14.5
validationでは、presence
とlength
を制限済み
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」が理由らしい
そこで、解決策がこちら↓
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)
#「!」は不要でした