DataMapper で関連オブジェクトを更新する方法

DataMapper で関連オブジェクトを更新する方法。

## 部署オブジェクトを作成
dept = Department.create!(:name => "Sales")

## それを使って従業員オブジェクトを作成
emp1 = Employee.create!(:name => "John", :department => dept)
emp2 = Employee.create!(:name => "Mike", :department => dept)

## 部署1の関連オブジェクトとして従業員1と2が表示される
dept.employees    #=> [emp1, emp2]

## ここで従業員1を削除
emp1.destroy

## でも関連オブジェクトには残ったまま
dept.employees    #=> [emp1, emp2]

## dept.employees を reload してやる
## (dept.employees が Array ではないからこその芸当)
dept.employees.reload
dept.employees    #=> [emp2]

## 部署オブジェクトも reload できるけど、ここでは必要ない
dept.reload       # select * from departments ... が実行される
dept.employees    #=> [emp2]


ほほう。


ちなみに dept.employees が返すのは、Array ではなくて DataMapper::Associations::OneToMany::Proxy というクラスのインスタンス
dept.employees.reload なんてことができるのは、そのおかげ。