我的应用中有Transaction
和Account
个模型。 Transaction belongs_to :account
和Account has_many :transactions
。
当用户创建交易时,应用会使用
更新交易帐户的余额after_create :add_to_account
在Account
模型中我有after_update
方法,但我需要在用户自行更新帐户时运行它,而不创建事务。
所以我需要运行此方法,只有从accounts_path
调用它或者从transactions_path
或Transaction
模型调用它时才需要。如何使用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
答案 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
#...