如何在轨道中观察新的或破坏的关联

时间:2014-11-18 21:53:17

标签: ruby-on-rails associations rails-activerecord

我知道在定义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的内容,基本上是在添加或删除付款时。

1 个答案:

答案 0 :(得分:0)

不必在关联定义行上定义回调。它们可以随时添加到关联对象中 - 特别是如果它们仅添加到此关联对象中。

以下是docs on callbacks here

的链接

要替换after_add回调,您需要的是after_create回调。以及after_remove你可以使用after_destroy

例如:

has_many :payments, as: :source

付款:

after_create :payment_added
after_destroy :payment_removed

现在 - 您已将其移动到子对象中,您可能需要调整逻辑以调用父对象上的方法...此外,如果这些付款可以添加到主对象以外的其他内容不行,但这是一个选择。