バリデーションの追加

コメントを追加できるようになったのは良いけれど、ちょっと困ったことがあります。ユーザーがコメント欄が空のままで投稿した時にこんな見かけになってしまうのです。

これはちょっとかっこ悪いですよね。なので、バリデーションを設定して、それが出来ないようにしましょう。

バリデーションの追加

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 [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る

×