目的
- バリデーションを用いたカラムのデータ検証にて自動で得られるエラーメッセージのふるまいを知る。
押さえるポイント
- エラーメッセージは自動で変数に配列の形で格納される。
- 配列の形で変数に格納されるため、ezch分を使用して出力する。
書き方の例
- モデルファイルにcontentカラムが空のときエラーを返すバリテーションがあらかじめ書かれていることとする。
- 下記にエラーメッセージの出力をrails consoleを用いて行う。
$ rails console
# 変数Aにcontentカラムが空のモデル名インスタンスをnewメソッドで作成
> 変数A = モデル名.new(content: "")
# 作成されたインスタンスを保存する。バリデーションにより空の内容での保存ははじかれる。
> 変数A.save
# falseが出た瞬間にエラーメッセージが変数A.errors.full_messagesに配列として格納される。
# 出力するには下記の処理
> 変数A.errors.full_messages
=> [`contentを入力してください`]
より具体的な書き方の例(rails console編)
- モデルファイルにcontentカラムが空のときエラーを返すバリデーションがあらかじめ書かれていることとする。
- 変数名をpost、モデル名をPostとする。
- 下記にエラーメッセージの出力をrails consoleを用いて行う。
$ rails console
# インスタンス作成
> post = Post.new(content: "")
# 保存
> post.save
# エラーを出力
> post.errors.full_messages
=> [`contentを入力してください`]
より具体的な例(アクション内に分岐処理・ビューでエラーを出力)
- モデルファイルにcontentカラムが空のときエラーを返すバリテーションがあらかじめ書かれていることとする。
- 別のビューファイルから
textarea
のname
属性で入力値がinput
に格納されているものとする。 - 変数名をpost、モデル名をPostとする。
- コントローラのアクション内に記載する処理を下記に記載する
# inputに入った入力値をparamsで呼び出し、それをcontentに入れて、新しいメソッドを作成
@post = Post.new(content: params[:input])
# 分岐処理@post.saveが成功(contentが空ではない)なら真、失敗(contentが空)なら偽
if @post.save
puts "保存成功"
else
puts "保存失敗"
end
- 上記のコントローラのアクションが指し示すビューでエラーを出力する処理を下記に記載する
<!-- バリデーションの検証ではじかれるコントローラのアクションで@post.errors.full_messageにエラーが入る -->
<!-- @postのerrors.full_messagesに格納されたエラー文の配列をeach文で変数messageに格納 -->
<% @post.errors.full_messages.each do |message| %>
<!-- 変数messageを出力 -->
<%= message %>
<!-- each文終了 -->
<% end %>