【问题标题】:Pass custom argument to rails event model callbacks?将自定义参数传递给 Rails 事件模型回调?
【发布时间】:2015-04-29 10:26:38
【问题描述】:

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

  after_create    :log_activity(my_var)

所以我可以编写 1 个方法来处理所有操作(销毁、保存、更新)?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    你可以这样做:

    after_create Proc.new{ log_activity(my_var) }
    
    def log_activity(my_var)
     :
    end
    

    【讨论】:

      【解决方案3】:

      我不确定这是否是 Rails 4.2 中的新功能,而不是您提出问题时提出的问题,但这有效:

      after_create -> { log_activity(my_var) }
      

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

      【讨论】:

      • 您介意解释为什么/如何解决问题,以及接受的答案可能是错误的吗?请记住,这是来自旧版本的软件,可能不支持新功能
      • 完成。谢谢,德里克。
      【解决方案4】:

      如果我理解正确的话,我的做法是在创建或销毁工资时更新用户的余额。所以试试这个代码:

      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
      

      希望对您有所帮助! :)

      【讨论】:

        猜你喜欢
        • 2010-10-24
        • 2011-07-05
        • 1970-01-01
        • 2011-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        相关资源
        最近更新 更多