将自定义参数传递给rails事件模型回调?

时间:2015-04-29 10:26:38

标签: ruby-on-rails-4 activerecord model callback arguments

非常简单的问题,但无法弄清楚这一点。 是否可以这样做:

  after_create    :log_activity(my_var)

所以我可以编写一个处理所有操作的方法(销毁,保存,更新)?

4 个答案:

答案 0 :(得分:5)

不,不可能将变量传递给回调方法。原因很简单,因为回调方法由rails堆栈调用,当它调用回调方法时,它不知道在回调方法中传递什么。

答案 1 :(得分:1)

你可以这样做:

after_create Proc.new{ log_activity(my_var) }

def log_activity(my_var)
 :
end

答案 2 :(得分:0)

如果我理解你,而不是在我的实践中更新用户在创建或销毁工资时的平衡。所以试试这段代码:

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

希望这会对你有所帮助! :)

答案 3 :(得分:0)

我不确定这是Rails 4.2中的新增功能,还是您问问题时的新增功能,但这不起作用:

after_create -> { log_activity(my_var) }

我想知道您真正遇到的问题是否与my_var的范围有关。您对my_var的打算是什么?