LoginSignup
8
4

More than 3 years have passed since last update.

Ruby on Rails バリデーション エラーメッセージ の 出力

Last updated at Posted at 2019-09-11

目的

  • バリデーションを用いたカラムのデータ検証にて自動で得られるエラーメッセージのふるまいを知る。

押さえるポイント

  • エラーメッセージは自動で変数に配列の形で格納される。
  • 配列の形で変数に格納されるため、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カラムが空のときエラーを返すバリテーションがあらかじめ書かれていることとする。
  • 別のビューファイルからtextareaname属性で入力値が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 %>
8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4