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 なんてことができるのは、そのおかげ。