Run方法取决于调用它的模型或路径

时间:2014-01-25 12:15:52

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

我的应用中有TransactionAccount个模型。 Transaction belongs_to :accountAccount has_many :transactions

当用户创建交易时,应用会使用

更新交易帐户的余额
after_create :add_to_account

Account模型中我有after_update方法,但我需要在用户自行更新帐户时运行它,而不创建事务。

所以我需要运行此方法,只有从accounts_path调用它或者从transactions_pathTransaction模型调用它时才需要。如何使用if语句实现它?

感谢您的帮助!

更新(如果有人遇到同样的问题)

bbozo的方法有效,但也许我对问题的描述不明确:after_create中的Transaction方法没有问题,问题出在after_update Account方法模型。所以,解决方案是:

class Account
  attr_accessor :initiated_by_user
  after_update :run_it_only_when_it_was_initiated_by_user

  private

  def run_it_only_when_it_was_initiated_by_user
    if initiated_by_user
      ..
    end
  end

end

并在accounts_controller

def update
  @account = current_user.accounts.find(params[:id])
  @account.initiated_by_user = true
  ...
end

1 个答案:

答案 0 :(得分:0)

class Transaction
  attr_accessor :initiated_by_user
  after_create :add_to_account
  private
  def add_to_account
    if initiated_by_user
      ..
    end
  end
end

然后在控制器中

t = Transaction.new(params[:transaction].permit(foo etc etc))
t.initiated_by_user = true
#...