Я пытаюсь отложить приращение столбца (yest_shareholder_count
) на один день, когда создается investment
, чтобы вести учет количества пользователей, у которых было investment
в * 1004. * один день назад (поэтому я могу использовать эти данные для составления графиков, отслеживающих количество инвесторов с течением времени).
Я подумал, что самый простой способ сделать это - использовать delayed_job
, но это не работает. Задержка_job создается в отдельной таблице и, согласно Браузеру БД SQLite, запускается на один день позже. Но столбец yest_shareholder_count не увеличивается.
Venture
Модель:
def yest_increment
self.increment!(:yest_shareholder_count)
end
handle_asynchronously :yest_increment, :run_at => Proc.new {1.minute.from_now}
Investments
Контроллер:
def create
@venture = Venture.find(params[:share_id])
@venture_increment= @venture.increment(:shareholder_count)
@venture_yest_increment= @venture.yest_increment
@investment = current_user.invest!(@venture)
if @venture_increment.save and @venture_yest_increment.save
respond_to do |format|
format.html {redirect_to @venture}
end
end
end
Простое приращение происходит так, как должно, но задержанное приращение никогда не происходит.
Это содержимое столбца «обработчик» в таблице delayed_jobs, на всякий случай, если они полезны:
--- !ruby/struct:Delayed::PerformableMethod
object: !ruby/ActiveRecord:Venture
attributes:
created_at: 2011-06-21 07:00:12.252808
onemth_shareholder_count: 0
updated_at: 2011-08-09 16:50:36.864354
onewk_shareholder_count: 0
shareholder_count: 4
id: 49
user_id: 40
yest_shareholder_count: 0
method_name: :yest_increment_without_delay
args: []
Я не уверен, откуда исходит "yest_increment_without_delay", или почему "args" пусто ...
Любая помощь высоко ценится.
РЕДАКТИРОВАТЬ: у меня есть "1.minute.from_now" вместо "1.day.from_now" только для проверки кода.