ネストされた属性のモデルを使用してコールバックを実装してみてくださいafter_update
。これにより、親が更新されます。
class Measure < ActiveRecord::Base
after_update :calculate_measure_sum
...
private
def calculate_measure_sum
# calculate sum
self.entry.save
end
end
コールバックでも同じメソッドを使用する必要がある場合がありafter_create
ます。
編集:
別の質問touch
で読んだ後、私のアプローチを更新したいと思います:
class Entry < ActiveRecord::Base
has_many :measures
after_touch :calculate_measure_sum
...
private
def calculate_measure_sum
# calculate sum
self.entry.save
end
end
class Measure < ActiveRecord::Base
belongs_to :entry, touch: true
...
end
ここで何が起こるかというと、メジャーが作成または編集されるたびに、touchメソッドを呼び出すことによってメジャーが更新されたことをエントリに通知します。エントリではafter_touch
、メジャーの合計を再計算するためにコールバックを使用する場合があります。after_touch
-callbackは、メジャーの作成、削除、および変更時に呼び出されることに注意してください。
私の以前のアプローチと比較して、このアプローチはエントリオブジェクトに責任を負わせます。これは設計の観点から有利です。