😎

Rails7のバリデーションにおける errors[:base] の記述方法の変更について

2025/01/12に公開

概要

Railsのバージョン7以降、バリデーションエラーを errors[:base] に追加する方法が変更されていました。
本記事では、旧記述方法と新記述方法の違いを解説します。

本題

旧記述方法 (Rails 6以前)

Rails 6以前では、 errors[:base] を直接操作することで、モデル全体に関連するエラーメッセージを追加していましたが、次のようなコードが一般的でした。

class Sample < ApplicationRecord
  def validate_Sample
    errors[:base] << "サンプルエラーメッセージです"
  end
end

ここで errors[:base] に直接エラーメッセージを追加することで、バリデーションに失敗した際にそのメッセージが表示されます。

新記述方法 (Rails 7以降)

Rails 7以降では、 errors[:base] に直接メッセージを追加する代わりに、 errors.add メソッドを使用してエラーメッセージを登録するようになりました。

新しい記述方法の例は以下の通りです:

class Sample < ApplicationRecord
  validate do
    errors.add :base, "サンプルエラーメッセージです"
  end
end

主な変更点

errors[:base] << から errors.add :base へ変更。
直接操作する代わりに、 addメソッドを使用します。

まとめ

Rails 7以降、バリデーションエラーの追加方法が errors[:base] << から errors.add :base へ変更されました。
今回私はRailsガイドの6系と7系の記事を見比べることでこの変更に気付きましたが、検索してもこの変更について説明されている日本語の記事が見当たらなかったため、今回記事にまとめました。
どなたかの参考になれば幸いです。

参考リンク:

Railsガイド (Rails 7.0 - Active Record バリデーション)
https://railsguides.jp/v7.0/active_record_validations.html#errors-base
Railsガイド (Rails 6.1 - Active Record バリデーション)
https://railsguides.jp/v6.1/active_record_validations.html#errors-base

Discussion