ruby-on-rails – Rails – 使用params中的run_at /指定何时发布的特定方法的延迟作业

在这里有点不知所措.
我只是试图在用户定义的时间延迟签入.我想尽量简单.
编辑:解决,见下文.
class MyController < ApplicationController

  def new_checkin
    # default venue is "SubMate"
    @venue_id = params[:venue_id] || "4c2c3acd8abca59355760120"
    @time = params[:time]
    @checkin = Delayed::Job.enqueue(self.perform_checkin,:run_at => @time.minutes.from_Now)
  end

  def perform_checkin
    foursquare.checkins.add(:venueId => @venue_id,:broadcast => "private")
  end

结果很奇怪:delayed_job是保存,执行操作(没有请求的@time延迟),我仍然收到错误

ArgumentError in MyController#new_checkin
  Cannot enqueue items which do not respond to perform

我错过了什么?如何在用户请求延迟的情况下执行此延迟作业?

谢谢!

UPDATE
感谢下面的@Roman,不知道你可以传递参数来延迟:

def new_checkin
  @venue_id = params[:venue_id]
  @time = params[:time]
  @checkin = self.perform_checkin
end

def perform_checkin
  foursquare.checkins.delay({:run_at => @time.minutes.from_Now}).add(:venueId => @venue_id,:broadcast => "private")
end

解决方法

如果你想以这种方式排队,那么正如错误所暗示的那样,排队的对象应该响应:perform.检查这个 http://asciicasts.com/episodes/171-delayed-job
您还可以使用:handle_asynchronously或.delay.method.检查: https://github.com/collectiveidea/delayed_job

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...