很简单的问题,但无法弄清楚这一点。是否可以这样做:
after_create :log_activity(my_var)
所以我可以编写一个处理所有操作的方法(销毁,保存,更新)?
不,不可能将变量传递给回调方法。原因很简单,因为回调方法由rails堆栈调用,当它调用回调方法时,它不知道在回调方法中传递什么。
你可以这样做:
after_create Proc.new{ log_activity(my_var) }
def log_activity(my_var)
:
end
如果我理解你,那么在我的实践中就是在创建或销毁工资时更新用户的余额。所以试试这个代码:
class Salary < ActiveRecord::Base
after_create { |action| action.update_user_balance(1) }
before_destroy { |action| action.update_user_balance(-1) }
def update_user_balance(val) #val can be +1/-1
user = self.user
user.update(balance: user.balance + self.sum * val)
end
希望对你有帮助! :)
我不确定这是否是Rails 4.2中的新功能与您询问问题的时间有关,但这样做有效:
after_create -> { log_activity(my_var) }
我想知道你真正得到的问题是关于my_var
的范围。你对my_var的意图是什么?