maeshimaの日記

メモ書きです

バリューオブジェクト

復習メモ。

バリューオブジェクトはActiveRecordの複数のカラムをオブジェクトにまとめたもの。

使い方

  • 第一引数に、使用したいバリューオブジェクトを設定、取得するためのメソッド名を指定
  • 第二引数はオプション。mappingでActiveRecordのカラムとバリューオブジェクトの属性をマッピングさせる。
composed_of :address, :mapping => [ %w(address_street street), %w(address_city city) ]

他のオプション

:class_name

デフォルトは、第一引数で指定したアクセサ名がバリューオブジェクトのクラス名になるけど、:class_nameで指定することも出来る。

:allow_nil

バリューオブジェクトにnilを設定できるようにする。nilを設定すると、マッピングされている全ての属性がnilになる

:constructor

コンストラクタのメソッド名かProcを指定する。バリューオブジェクトの初期化時に呼ばれる。全てのマッピングされたアトリビュートで実行される。その順序は:mappingオプションで指定した順序。デフォルトは:new

:converter

新しい値がバリューオブジェクトに割り当てられたときに呼ばれるメソッド名かProcを指定する。新しく割り当てられた値に対して実行される。新しい値が:class_nameで指定したインスタンスのときは呼ばれない。