Я немного растерялся.
Я просто пытаюсь отложить проверку, например, в определенное пользователем время. Хотелось бы сделать это как можно проще.
РЕДАКТИРОВАТЬ : решено, см. Ниже.
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
What я скучаю? Как я могу выполнить это отложенное задание с задержкой, запрошенной пользователем?
Спасибо!
ОБНОВЛЕНИЕ
Благодаря @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