我知道在定义rails中的关联时可以使用after_add和after_remove关联回调,如此处的“关联回调”部分所述 - http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
但我正在使用的宝石已经定义了这样的关联:
has_many:付款,如:来源
我尝试使用class_eval或ActiveSupport :: Concern来覆盖关联,所以它看起来像这样:
has_many:付款,如:: source,after_add :: payment_added,after_remove :: payment_removed
但它不适合我(如果你认为它应该让我知道)
所以不要试图覆盖它,我想知道是否还有其他方法可以观察类似于after_remove和after_add的内容,基本上是在添加或删除付款时。
答案 0 :(得分:0)
不必在关联定义行上定义回调。它们可以随时添加到关联对象中 - 特别是如果它们仅添加到此关联对象中。
的链接要替换after_add
回调,您需要的是after_create
回调。以及after_remove
你可以使用after_destroy
例如:
has_many :payments, as: :source
付款:
after_create :payment_added
after_destroy :payment_removed
现在 - 您已将其移动到子对象中,您可能需要调整逻辑以调用父对象上的方法...此外,如果这些付款可以添加到主对象以外的其他内容不行,但这是一个选择。