加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – 使用params中的run_at /指定何时发布

发布时间:2020-12-16 19:10:35 所属栏目:百科 来源:网络整理
导读:我在这里有点不知所措. 我只是试图在用户定义的时间延迟签入.我想尽量简单. 编辑:解决,见下文. class MyController ApplicationController def new_checkin # default venue is "SubMate" @venue_id = params[:venue_id] || "4c2c3acd8abca59355760120" @ti
我在这里有点不知所措.
我只是试图在用户定义的时间延迟签入.我想尽量简单.
编辑:解决,见下文.
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读