2017-02-15 97 views
0

我在从self.method之外获取应用程序数据时遇到问题。delayed_job传递实例方法和变量?

要使用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中做的那样?

回答

2

任何想法如何绕过这一点,让session[:test_password] ...

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

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

+0

我可以访问其他实例方法吗?我可以使类方法将参数(定时器变为0后)传递给即时方法并调用它。那有意义吗? – Kappa

+0

哪些类的实例的方法,我可以问吗? –

+0

在类方法内调用实例方法。我读过一些东西,似乎我不能那样做。 – Kappa