プログラミング勉強中!!

TECH::EXPERT 40期 受講生の筆者がその日学んだことをアウトプットしていくブログです。学習量によっては全て書ききれないこともあります。お気付きのことありましたバシバシコメントください!!3月中旬よりWEBエンジニアとして働くことになりました。日々の業務などについても発信させていただきたいと思います!!よろしくお願いいたします!!

モデルの検証(バリデーション)について

はい、こんばんは。

本日は検証(Validation)についてアウトプットします。

バリデーションとは

データの内容が正しいかどうかを検証する仕組みのことです。 仕組みとしては、レコードをデータベースに登録・更新などする前に検証し、もしエラーがあれば登録・更新などをせずに差し戻すという仕組みになっています。

以下、具体的なコードをみてみましょう。

バリデーションのコード

tasks_controller.rb

  def new
    @task = Task.new
  end

   def create
    @task = Task.new(task_params)

    if @task.save
     redirect_to tasks_url, notice: "タスク「#{@task.name}」を登録しました"
        else
         render :new
    end
  end

まず、tasks_controllerのnewアクションからフォームがcreateアクションに送られます。createアクションに行ったデータは if @task.save・・・で登録されようとするのですが、ここでデータが正しく入力されているのか検証します。その記述はモデルにすることになります。

app/models/tasks.rb

  class Task < ApplicationRecord
 #バリデーションの記述
    validates :name, presence: true                    #データは入力されているか?
 validates :name, length: { maximum: 30 }    #30字以内であるか?
  end

以上でバリデーションの記述は終わりです。

これで空欄にした場合と30字を超えた場合はデータがsaveされずに差し戻されることとなります。

ここで疑問に思ったのが、 :nameってなんだ?ということでした。

答えは下記でした。

app/views/new.html.slim

= form_with model: @task, local: true do |f|
  .form-group
    = f.label :name
    = f.text_field :name, class: 'form-control', id: 'task_name'

上記のように、form_withのコードの中にf.label :nameとあります。ここの属性を指定していたのでした。

それでは。