DataMapper でコールバックを定義できるようにして、これを付随する更新と共にトランザクションで発生させたいと考えています。例えば:
class Comment
include DataMapper::Resource
has n, :updates
property :id, Serial
property :text, String
after :update do
self.updates.create(:text => self.text)
end
end
上記のコードが何をしようとしているのかは明らかだと思います: aComment
が更新されるたびに、対応するUpdate
レコードも作成します。ここで考えられるシナリオは、投稿を更新することができ、何らかの理由で更新の作成が失敗し、一部の履歴が失われるというものです。したがって、この種の操作がトランザクション内で発生することを本当に望んでいます。
これは可能ですか?update
いくつかの回避策を思いつくことができます (たとえば、カスタムメソッドを定義するなど)。しかし、「正しい」方法があるかどうか、または他の人がエレガントなアプローチを考えられるかどうかを知りたいです。