Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@miriwo

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

More than 1 year has passed since last update.

目的

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

押さえるポイント

  • エラーメッセージは自動で変数に配列の形で格納される。
  • 配列の形で変数に格納されるため、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 %>
0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
miriwo
web系のバックエンドの知識を習得中! 2019/07/07~毎日更新中!
boomtechcafe
埼玉県の朝霞台を拠点にエンジニアの勉強会、交流会等のイベントを企画しています! 朝霞台駅か北朝霞駅が全然行けちゃうぜってエンジニアの方がいたら是非! もくもく会とかゲーム大会とかもやれたらな~って思ってます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?