从另一个模型运行模型的更新方法

时间:2014-05-05 19:16:46

标签: ruby-on-rails ruby-on-rails-4

我有TransactionDebt型号。

transaction has_one: :debt
debt belongs_to: :transaction

当用户创建交易并将其标记为债务时,Transaction模型会创建transaction.debt并且在Debt模型中我拥有处理债务的所有逻辑:运行before_create和{ {1}}方法。

因此,我需要更新事务的相同行为。我是否可以从after_create模型运行before_update模型的更新方法(after_updateDebt),而无需任何更新属性?

据我所知,所有更新方法,例如Transactionupdate都需要一些更新属性。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

由于ActiveRecord上下文,您可以运行特定的回调,如下所示:

transaction.run_callbacks(:update)

答案 1 :(得分:0)

如果您将before_updateafter_update回调定义为实际方法,则可以直接在回调之外调用它们。

class Debt < ActiveRecord::Base

  before_update :do_before
  after_update :do_after

  def do_before
    # Before update processing
  end

  def do_after
    # After update processing
  end

当债务以通常的方式更新但您可以从交易中调用时,这些回调将由活动记录调用:

self.debt.do_before
self.debt.do_after