#バリデーションとは#
バリデーションとは、
入力されたものをチェックすること
例えるなら、飛行機に乗る前の荷物検査。
・重量オーバーしてたらダメ
・危ないもの持ってたらダメ
とか。
プログラミングは、主にログインや登録で使われる。
・入力されていないとダメ
・長いタイトルはダメ
とか。
#バリデーションの使い方(まずざっくり)#
大きく分けると、この3つを書く。
①モデルに、バリデーション書く
②コントローラに、通った時と通らなかった時の動きを書く
③ビューに、通らなかった時のエラーメッセージを書く
#バリデーションの使い方(具体的)#
先ほどの3つの流れに沿って。
###①モデルに、バリデーション書く
###
validates :name, presence: true
(validates :チェックするもの, 何が: どう?)
この場合だと、
「name」を、「存在」が「ある」かどうかチェックする。
「name」に何も書いてないとfalse
「name」に何か書いてあるとtrue
チェックできる項目は他にもたくさんあるから、下記を参考に。
###②コントローラに、通った時と通らなかった時の動きを書く
###
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」のビューに戻す
###③ビューに、通らなかった時のエラーメッセージを書く
###
<% if @name.errors.any? %>
<%= @name.errors.count %>件のエラーが発生しました
<% @name.errors.full_messages.each do |message| %>
<%= message %>
<% end %>
<% end %>
これでエラーの数も含めて、エラーメッセージを出せる。
以上。