やりたいこと
①投稿完了後の成功メッセージ(フラッシュメッセージ)フラッシュメッセージの実装
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>
エラーメッセージの日本語化はgem入れるとできるようですが、
なんでもかんでも日本語化したくないと思ってしまうところがあります。。