rails6 バリデーションを設定する

rails6 バリデーションを設定する

rails6でformの入力値にバリデーションを設定するまでの手順を記述してます。Railsのバージョンは6.1.1を使用してます。

環境

  • OS CentOS Linux release 7.9.2009 (Core)
  • Ruby 2.7.2
  • Rails 6.1.1
  • rbenv 1.1.2-40-g62d7798

アプリケーション作成

まずは、scaffoldを使用してアプリケーションの雛形を作成します。

rails g scaffold foo title:string content:text

テーブルも作成しておきます。

rails db:migrate

バリデーション設定

「app/models」配下にある「foo.rb」に以下の内容を追加します。

ここでは、titleを必須項目して未入力の場合はエラーを表示します。

class Foo < ApplicationRecord
  validates :title,
            presence: true
end

titleを未入力の状態で「Update Foo」をクリックします。

エラーメッセージが表示されるようになります。

その他バリデーション

文字数制限

# 8文字以上
validates :title, length: { minimum: 8 }
# 8文字以下
validates :title, length: { maximum: 8 }
# 1文字以上75文字以下
validates :title, length: { in: 1..5 }
# 8文字のみ
validates :title, length: { is: 8 }

数値であるかどうか

validates :title, numericality: true

日本語化

このままだとエラーメッセージが英語になっているので、カスタムバリデーションを使用して、日本語化します。

class Foo < ApplicationRecord
  validate :add_error_foo

  def add_error_foo
    if title.blank?
      errors[:base] << "タイトルは必須項目です"
    end
  end
end

日本語化されていることが確認できます。