Help us understand the problem. What is going on with this article?

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

目的

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

押さえるポイント

  • エラーメッセージは自動で変数に配列の形で格納される。
  • 配列の形で変数に格納されるため、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 %>
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away