実践で学ぶRuby on rails 〜仮説千本ノック〜

プログラマーとして独立するため日々スキルアップに励んでいます。優れたプログラマは仮説を立てるのがうまい。そこを目指して仮説を立てては検証する日々です!!

フォームに何も入力されなかった時のエラー表示方法

チャットアプリのグループ作成機能を作るにあたり、

グループ作成フォームのグループ名がブランクのまま、

フォームが送信された場合に、エラーを表示させたい。

 

例えば、こんな感じです。

「エラーが〇〇件あります」(件数)

「グループ名を入力してください」(エラー内容)

 

必要な作業は、

①バリデーションの設定

②ビューファイルへの記述です。

 

■バリデーション設定

groupモデルにおいて、

グループ名がブランクだった時にエラーが発生するよう、

バリデーションを設定。

これがないと、グループ名がブランクであっても、

エラとして認識されません。

 

class Group < ApplicationRecord
 
validates :name, presence: true
end

 

■ビューファイルへエラー発生時の挙動を記述

次に、フォームを記述したビューファイルにおいて、

if文を使って、

エラーが発生した時(ブランクだった時)に、

エラー件数とエラーの内容を表示するように記述

 

.chat-group-form
%h1 新規チャットグループ
= form_for @group do |f|
- if @group.errors.any?
.chat-group-form__errors
%h2= "#{@group.erros.full_messages.count}件のエラーが発生しました。"
%ul
- @group.errors.full_messages.each do |message|
%li = message

 

見た通り、通常、エラーメッセージに関する記述は、

フォームの始まりの記述である

= form_forのすぐ後から書くことが多いです。

 

- if @group.erros.any?は、

バリデーションによりエラーとして認識されたものがあった場合に作動するif文です。

「エラーがあったら下記の動きをしますよ」的な。

 

= @group.errors.full_messages.countは、

発生した全てのエラーの件数を算出します

上記コードでは、算出された件数をメッセージに組み入れるために式展開を使用。

 

- @group.erros.full_messages.each do |message|

= message

これは、発生した全てのエラーメッセージを配列として扱い、

1つずつ表示させるための記述です。