LoginSignup
1
3

More than 3 years have passed since last update.

【ERROR メッセージ表示】rails 部分テンプレートでいつでも使える 簡易版

Posted at

【ゴール】

errorメッセージの表示

画面収録 2020-06-23 18.49.15.mov.gif

【メリット】

■ UX向上
■ 部分テンプレートの理解度向上

【開発環境】

■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

【実装】

アプリケーション作成

※touch はカレントディレクトリ内でfile作成するコマンド

mac.terminal
$ rails new error_test
$ cd error_test
$ rails g scaffold Item name:string texte:text amount:integer
$ rails db:migrate
$ cd app/views/layouts
$ touch _error_messages.html.erb

モデル追記

※DB保存時の条件
バリデーション = 保存時の制限 を追加

models/item.rb
class Item < ApplicationRecord
  validates :name, presence: true
  validates :text, presence: true
  validates :amount, presence: true
end

ビュー追記

※パーシャル化し、凡庸性UP
「layputs/_error_messages.html.erb」に入れる事で
バリデーションを貼っていれば全てのモデルに使用可能に!!!!

layputs/_error_messages.html.erb
<% if model.errors.any? %>
  <div class="alert alert-warning">
    <ul>
      <% model.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

※追加する

Items/_form.html.erb
<%= render 'layouts/error_messages', model: f.object %>

scaffold で作成の場合は上記は不要
各 _form のviewにて下記コード記載の為(scaffold超便利ですね)

/_form.....
<% if item.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(item.errors.count, "error") %> prohibited this item from being saved:</h2>

  <ul>
    <% item.errors.full_messages.each do |message| %>
    <li><%= message %></li>
    <% end %>
  </ul>
</div>
<% end %>

※scaffoldの元々のやつ
スクリーンショット 2020-06-23 18.46.33.png

※パーシャルしたやつ
スクリーンショット 2020-06-23 18.47.29.png

以上です。お好みでどうぞ!!!

【合わせて読みたい】

■エラーメッセージに関して
https://qiita.com/ryuuuuuuuuuu/items/1a1e53d062bff774d88a

■hidden_field
https://qiita.com/tanaka-yu3/items/0d454c5ef80f8267f09d

■アプリケーション作成
https://qiita.com/tanaka-yu3/items/3fe1ed2852c6513d3583

1
3
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
1
3