【问题标题】:delayed_job passing instance methods & variables?delay_job 传递实例方法和变量?
【发布时间】:2017-07-04 12:32:18
【问题描述】:

我在从 self.method 外部获取应用程序数据时遇到问题。

要使用Model.delay.method,方法必须是一个类。

我真的很喜欢,它满足了我的所有需求(比如在调用方法时保存输入参数),但我需要做的是从方法外部获取变量。

例如: 用户单击按钮并启动计时器。

QuizzesController.delay(run_at: @quiz.time_limit.minutes.from_now).form_timeout(session[:user_id],session[:test_password])

方法form_timeout如下所示:

def self.form_timeout(id, test_password)
  if test_password == session[:test_password]
    Score.create(user_id: id, name: test_password, points: -1) 
    session.delete(:test_password)
  end
end

当我尝试这样做时,我收到一个错误“未定义的方法会话”,这意味着我在使用 self.method 时无法访问该数据。

知道如何绕过它并让session[:test_password](会话必须传递最新信息,因为我比较了session[:test_password]从计时器开始的时间(旧的)和它结束的时间(新的)) 就像我在 self.method 中所做的那样?

【问题讨论】:

    标签: ruby-on-rails ruby background-process delayed-job


    【解决方案1】:

    知道如何绕过它并让session[:test_password]...

    不,没有办法这样做。 session 不是简单的实例方法。它从 cookie 中获取数据(默认情况下)。并且在后台工作人员上下文中无法访问 cookie。

    后台工作人员的经验法则是:延迟方法必须在其参数中接收它需要的所有数据。

    【讨论】:

    • 我可以访问其他实例方法吗?我可以制作将参数(在计时器变为0之后)传递给即时方法并调用它的类方法。这有意义吗?
    • 请问什么类的哪个实例的方法?
    • 在类方法中调用实例方法。我读过一些东西,似乎我做不到。
    • 但是,现在我想起来了。如果数据库中有满足某些要求的特定记录,例如15分钟内的创建日期,我可以检查类方法吗?
    • @Kappa:是的,你可以做到。
    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2011-08-27
    • 2014-03-06
    • 1970-01-01
    • 2013-05-28
    • 2012-07-19
    • 2016-01-07
    相关资源
    最近更新 更多