プログラミング未経験の初心者ですが、少し前にProgateのRuby on Railsコースを終わりました。
Railsチュートリアルをしながら復習してみると、Progateをやっていた時はあまりピンと来なかったけど、今なら少し理解できることが増えたので、気づいた点をまとめていきたいと思います。
この記事はその2です。
その1はこちら
https://qiita.com/HiMinmeg/items/1e29bf9252096d463f6b
Progateしているけど、ピンと来ていないな、ここ分からないなと思っている方のお役に立てば幸いです。
エラーメッセージのeach文【コースⅤ】
バリデーションをかけて、投稿に対してエラーとなった時(制限文字数以上入力したとか…)投稿すると、エラーメッセージが表示されるようにします。
この時、each文を使う理由が分かっていませんでした。
考えてみると当たり前のことだったのですが、それでも理解できた時嬉しかったので、記録に残したいと思います。
エラーメッセージのeach文は例のような使い方になります。
<% @post.errors.full_messages.each do |message| %>
<%= message %>
<% end %>
errors.full_messages
はエラー内容を配列で取得します。
参考記事 https://qiita.com/ryuuuuuuuuuu/items/1a1e53d062bff774d88a
Railsガイド 7.バリデーションエラーに対応する
Railsガイド 8.バリデーションエラーをビューで表示する
ここでポイントなのは、バリデーションを複数かけているとエラー内容で取得する配列も複数あるということです。
なので、each文で配列の中身を一つずつ取り出す必要があります。
エラーが同時に複数発生する可能性はあるので、そこをまったく考えていなかったが為に、どうしてeach文なのだろうと思っていた、ということでした。
まとめ
・errors.full_messages
はエラー内容を配列で取得する。
・リデーションを複数かけているとエラー内容で取得する配列も複数あるため、each文で配列の中身を一つずつ取り出す必要がある
ここまで目を通していただきありがとうございます。
間違っている場合、コメントでご指摘ください。
参考になれば嬉しいです。