バリデーションとは

バリデーションとは、
入力されたものをチェックすること

例えるなら、飛行機に乗る前の荷物検査。

・重量オーバーしてたらダメ
・危ないもの持ってたらダメ

とか。

プログラミングは、主にログインや登録で使われる。

・入力されていないとダメ
・長いタイトルはダメ

とか。

バリデーションの使い方(まずざっくり)

大きく分けると、この3つを書く。

①モデルに、バリデーション書く

②コントローラに、通った時と通らなかった時の動きを書く

③ビューに、通らなかった時のエラーメッセージを書く

バリデーションの使い方(具体的)

先ほどの3つの流れに沿って。

①モデルに、バリデーション書く

models/sample.rb
validates :name, presence: true
validates :チェックするもの, 何が: どう?)

この場合だと、
「name」を、「存在」が「ある」かどうかチェックする。

「name」に何も書いてないとfalse
「name」に何か書いてあるとtrue

チェックできる項目は他にもたくさんあるから、下記を参考に。

Railsバリデーションまとめ

②コントローラに、通った時と通らなかった時の動きを書く

controllers/sample.controller.rb
  def create
    if @name.save
      redirect_to page_path
    else
      render :new
    end 
  end

この場合だと、
「name」を「save」できたら「page_path」に飛ぶ
「name」を「save」できなかったら「new」に飛ぶ

通らなかったとき(else)は、
基本「redirect_to」はダメで、「render」を使う。

理由は、ざっくり言うと、

・「redirect_to」だと通らなかったことを受けとった後、すぐそれを忘れちゃうから。
すると、エラーしたことを忘れて、エラーメッセージが出なくなっちゃう。
→「new」のアクションに戻す

・「render」 だと通らなかったことを受け取って、二度とくるなって感じだから。
エラーしたことを覚えたまま、エラーメッセージを出す。
→「new」のビューに戻す

③ビューに、通らなかった時のエラーメッセージを書く

views/sample/sample.html.erb
  <% if @name.errors.any? %>
    <%= @name.errors.count %>件のエラーが発生しました
    <% @name.errors.full_messages.each do |message| %>
      <%= message %>
    <% end %>
  <% end %>

これでエラーの数も含めて、エラーメッセージを出せる。

以上。