コメントを追加できるようになったのは良いけれど、ちょっと困ったことがあります。ユーザーがコメント欄が空のままで投稿した時にこんな見かけになってしまうのです。
これはちょっとかっこ悪いですよね。なので、バリデーションを設定して、それが出来ないようにしましょう。
models/opinion.rbに以下のコードを追加しましょう。
class Opinion < ApplicationRecord
belongs_to :clip
belongs_to :user
# 以下を追加する
validates :title, :body, presence: true
end
Opinionには、かならずtitleとbodyが存在する必要があります!というコードですね。
バリデーションで引っかかってしまった場合のコードも書いておきましょう。失敗したらもう一度clips/showを表示すると書きます。
format.html { render 'clips/show' }
このコードはrespond_toの中に書きましょう。
respond_to do |format|
if @opinion.save
format.html {...}
format.json {...}
else
format.html { render 'clips/show' } # <= ここに書きます
format.json { ... }
end
end
バリデーションが失敗した場合のエラーメッセージを追加します。clips/show.html.erbに以下を追加しましょう。オレンジ色の部分に気をつけてコードを書いてください。
# clips/show.html.erb
<% if @opinion && @opinion.errors.any? %>
<div id="error_explanation">
<h5>
<%= pluralize(@opinion.errors.count, "error") %>
<h5>
<ul>
<% @opinion.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
空で投稿するとエラーメッセージが表示されようになれば成功です。
タイトルの文字数が3文字以上というバリデーションを設定しましょう。
ヒント:validation length
無料ビデオ講座のお知らせ
Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。