ページ

2013年5月28日火曜日

Rails3.2 ActiveRecordに関するメモ

ActiveRecordのサブクラスであるModel(以下Model)の機能に関する覚書。


一意性制約を定める
Modelに次のように記述する
validates_uniqueness_of :column_name
Migrationに次のように記述し、実行する
add_index :table_name, :column_name, :unique => true


validate?の挙動
前提条件:ModelAとModelBの間にリレーションが定められている
ModelA.valid?の戻り値がfalseの場合、
ModelB.valid?の戻り値もfalseとなる。
つまり、リレーションが定められているModelをsaveするときには、
すべてのModelでバリデーションが実行される。


saveで保存されるオブジェクト
前提条件:ModelAとModelBに多対多のリレーションが定められている
ModelA.saveを呼び出すと、下記のModelが保存される

  • ModelA
  • ModelB
  • ModelAとModelBの関連テーブルのModel

(関連テーブルのインスタンスは自動的に生成される)

つまり、下記のようなコードで事足りる。
modelA = ModelA.new(hoge: 'hoge') #モデルAをインスタンス化
modelB = ModelB.new(foo: 'foo') #モデルBをインスタンス化
modelA.modelBs << modelB #モデルAとモデルBを関連付ける
modelA.save #関連テーブルのModelが自動生成され、すべてのModelが保存される