はじめに
例えばresult.saveのように変数resultの保存をしようとした時に、失敗するとresultにエラーメッセージが格納される。
これを利用してエラーメッセージを表示させたいがRubyのエラー画面となる。
言い換えると思い通りのエラーメッセージが出ない。
エラー時にコンソールで確認の以下のようになる
result.errors.any? => False
保存できてないのにエラー出てないことになってる。
今回は無入力で登録しようとするとエラーを出したい。
原因
Modelにバリデーション記述が無かったことが原因。
テーブル作成時にはカラムに制限(無入力制限のため null: falseとした)がそれだけではエラーメッセージがでない。
対策
Modelに以下のような記述をした。
class Result < ApplicationRecord
belongs_to ...
has_many ...
validates :name, presence: true
...
end
validates :name, presence: trueと記述することで
result.errors.any? => True
となり
result.errors.full_messages
で、エラーメッセージ全件の内容を取得しeachを用いて取り出せました!