0
0

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.

バリデーションの実装

Last updated at Posted at 2021-05-18

バリデーションとは?

 レコードをテーブルに保存する時には、値が正しいかどうかの検証が必要になります。この検証を簡単にこなすのがRailsに用意されたバリデーション(validatesメソッド)です。

バリデーションの書き方と具体例

①Railsアプリケーションフォルダのapp/models/___.rbにソースコードを記述

book.rb
  validates :title, presence: true
  validates :body, presence: true,length: {maximum: 200 }

【意味】バリデーションによって、空白のデータが入力されていなければ、saveメソッドでfalseが返される。

【詳細】
⇒(title)と(body)に「presence: true」を指定することで「空白を禁止(値を必ず入れなければいけない)」という指定を行います。

⇒length: {maximum: 100 }というものを設けて最大値を設定することもできる。反対にminimum:2(最低でも2文字以上入力が必要)で最低数も設定できる。

②コントローラで設定を行う

books_controller.rb
  def create
    @book = Book.new(book_params)
    if@book.save
      redirect_to book_path(@book)
    else
      render 'index'
    end
  end

【意味】新規投稿などでデータを作成する際にアクションとしてcreateが作動します。その時に入力フォームに不備がある場合の処理方法をコントローラーに記載。

【詳細】

    if@book.save
      redirect_to book_path(@book)

⇒もし保存することができる場合には、投稿を保存後book_path(@user)へ移動します。今回は投稿した際にbook/1に遷移したいためこのような設定。
※ルートパスは随時確認して設定する必要がある。

    else
      render 'index'

⇒入力フォームに問題があり保存ができないと判断された場合の処理を書くところ。renderでコントローラーの処理を返さず直接indexの表示画面へ遷移します。その他newなど設定可能。

③viewページへエラー分を表示することを書く
バリデーションの記述が行われても、エラーの内容が表示されません。次が最後エラーの内容が確認できるようする。

new.html.erb
    <% if @book.errors.any? %>
      <h3><%= @book.errors.count %>errors prohibited this obj from being saved:</h3>
      <% @book.errors.full_messages.each do |message| %>
      <ul><li>
        <%= message %>
        </li>
        </ul>
      <% end %>
    <% end %>

【詳細】
<% if @book.errors.any? %>
⇒errors.any?は、発生したエラーの内容を確認できany?と組み合わせることで、エラーの判定できる。

<%= @book.errors.count %>errors prohibited this obj from being saved:
⇒errors.countでエラーの個数を表示してくれます。%>以降では表示したい文字を記入する。(例)<%= @book.errors.count %>個エラーがあります。

<% @book.errors.full_messages.each do |message| %>
⇒また、full_messageと組み合わせることで、エラーの内容を出力できます。
エラー文は配列で保存されているため、eachを使う。

最終イメージ図

下記のようにエラーコードを表示することができる。
図10.png
※文字の色などはCSSやBootstrapで設定する。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?