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

はい、こんばんは。

本日は検証(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とあります。ここの属性を指定していたのでした。

それでは。

コメント

タイトルとURLをコピーしました