Active Model
Active Modelは、Active Recordからデータベースに関連する部分を切り除いた機能を提供する。
それらのうちいくつか主要なモジュール、FormObjectで使用するモジュールなどについて説明していく。
ActiveModel::AttributeMethods
attr_accessor で定義されたアクセサに対して、一括で値を設定することができる機能を提供する
ActiveModel::Callbacks
コールバックを提供するモジュール。標準で提供されているコールバックの他に、カスタムでコールバックを追加するためのメソッドも提供されている。
ActiveModel::Conversion
active modelへの変換メソッドや重要な値を返す変換メソッドを提供する。
id
、persisted?
メソッドが定義されているとこのモジュールをインクルードしたオブジェクトに対して次のようなメソッドが使えるようになる。
- to_key
- to_param
- to_partial_path
など
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シリアライズ/デシリアライズ機能を提供する
まとめ
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