はい、こんばんは。
本日は検証(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とあります。ここの属性を指定していたのでした。
それでは。
コメント