1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby on rails]フラッシュメッセージ&エラーメッセージ Bootstrap バリデーション

Posted at

やりたいこと

①投稿完了後の成功メッセージ(フラッシュメッセージ)

スクリーンショット 2021-07-17 20.33.25.png

②投稿ができなかった時のエラーメッセージ
スクリーンショット 2021-07-17 17.32.45.png

フラッシュメッセージの実装

def create
    @item=Item.new(item_params)
    if @item.save
    redirect_to admin_item_path(@item), notice:"登録完了しました!"
    else
    render :new
    end
  end

  def update
    @item=Item.find(params[:id])
    if @item.update(item_params)
    redirect_to admin_item_path(@item),notice:"更新完了しました!"
    else
    render:edit
    end
  end

メッセージを表示させたいviewファイルの記述
シンプルに<%= notice %>だけでもいけます。
show.html.erb
<% if flash[:notice] %>
 <div class="alert alert-success" role="alert">
 <p class="notice text-center" style="color:green;"><%= flash[:notice] %></p></div>
<% end %>

エラーメッセージ実装

まずバリデーションを記述します。
ここで、引っかかればfalse 何もなければtrueが返って来ます。

バリデーションだけ書くだけだと、エラーメッセージは表示されませんので注意
    validates :name,:introduction,:price,presence:true
    validates :introduction, length: {maximum: 250}
    validates :price, numericality: { only_integer: true }

上記のコードで、下記3つの項目を記述しています。

item(商品)の登録時、商品名、商品紹介、価格の空欄投稿をNGに。
商品紹介(introduction)の長さを250字までに。
商品価格(price)は数値(半角)であること!
(もし、全角で1000とか打つと、「Price is not a number」と弾かれます。)

以下参考にさせていただきました

エラーメッセージを表示させる

投稿機能、編集機能が複数ある場合には、こんな感じで部分テンプレートにすると楽です。

<%= render 'layouts/errors', obj: @item %>

部分テンプレートにしない場合、objのobjには@itemなり@bookなり渡してください。
objはオブジェクトです。

layouts/_errors.html.erb
<% if obj.errors.any? %>
  <div class="alert alert-danger" role="alert">
  <div id="error_explanation">
    <h3><%= pluralize(obj.errors.count, "error") %> prohibited this obj from being saved:</h3>
    <ul>
      <% obj.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
  </div>
<% end %>

終わり

現状でできる日本語化はこれ

上記のコードの一部を、こんな風に変えて少し日本語にしました。
<h3><%= pluralize(obj.errors.count, "error") %> 保存されていません</h3>

スクリーンショット 2021-07-17 18.03.15.png

エラーメッセージの日本語化はgem入れるとできるようですが、
なんでもかんでも日本語化したくないと思ってしまうところがあります。。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?