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
日本語化されていることが確認できます。

-
前の記事
コマンドプロンプト コピー時にファイル名に現在日付を付与してコピーする 2021.04.02
-
次の記事
ASP.NET Core Razor Pagesでスキャフォールディングを実行する 2021.04.02
コメントを書く