LoginSignup
6
3

More than 1 year has passed since last update.

Active Modelについて

Last updated at Posted at 2021-10-02

Active Model

Active Modelは、Active Recordからデータベースに関連する部分を切り除いた機能を提供する。
それらのうちいくつか主要なモジュール、FormObjectで使用するモジュールなどについて説明していく。

ActiveModel::AttributeMethods

attr_accessor で定義されたアクセサに対して、一括で値を設定することができる機能を提供する

ActiveModel::Callbacks

コールバックを提供するモジュール。標準で提供されているコールバックの他に、カスタムでコールバックを追加するためのメソッドも提供されている。

ActiveModel::Conversion

active modelへの変換メソッドや重要な値を返す変換メソッドを提供する。
idpersisted?メソッドが定義されているとこのモジュールをインクルードしたオブジェクトに対して次のようなメソッドが使えるようになる。

  • to_key
  • to_param
  • to_partial_path

など

Github

ActiveModel::Validations

データを検証するためのメソッドを提供する。
機能一覧
Github

ActiveModel::Naming

モデル名に対するヘルパクラスメソッドを提供する
Rails Guide

ActiveModel::Translation

オブジェクトとRails国際化(i18n)フレームワーク間の統合機能を提供する

独自のロケールファイル内で定義されたものをhuman_attribute_nameが参照し属性名を変換する。

ActiveModel::Model

Action PackやAction Viewと連携するための機能を提供する。
このモジュール内では次のモジュールをincludeしている。

  • ActiveSupport::Concern
  • ActiveModel::AttributeAssignment
  • ActiveModel::Validations
  • ActiveModel::Conversion
  • ActiveModel::Naming
  • ActiveModel::Translation

また、ActiveModel::Validations内でActiveModel::Callbacksもincludeしているためこの機能も使える。

大まかに以下のような機能を提供している。

  • モデル名の調査(Naming)
  • 変換(Conversion)
  • 翻訳(Translation)
  • バリデーション(Validation)

これらの機能をFormObjectにMix-inさせることで、ActiveRecordモデルと対応していないオブジェクトでもモデルのような振る舞いを獲得できる。

ActiveModel::Serializers::JSON

JSONシリアライズ/デシリアライズ機能を提供する

Rails Guide

まとめ

FormObjectを作成する際は、include ActiveModel::Modelさせることにより、バリデーションやi18nによる翻訳機能を獲得し、ActiveModel::Conversionメソッドを適切にラップさせることによってform_withなどのヘルパーメソッドに渡すことも可能になる。

その他

ActiveModel::Attributes

属性の値を代入する際、型を意識しなくても自然に求める型に変換してくれる機能を提供する。
https://qiita.com/alpaca_taichou/items/bebace92f06af3f32898

参考記事

Railsガイド Active Model の基礎
https://naokirin.hatenablog.com/entry/2019/02/20/231317

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3