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.

【Rails バリデーション基礎(小学生でも分かる解説)】

Posted at

#バリデーションとは#

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

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

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

とか。

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

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

とか。

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

大きく分けると、この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 %>

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

以上。

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?