Rails 4 и delayed_job 4.1.2. Я пытаюсь задержать перерасчет общего рейтинга после уничтожения обзора, но очевидно, что после уничтожения объекта обзора нет идентификатора объекта Review. Поэтому каждый раз после попытки уничтожить объект, он пытается создать замедленную работу, но выдает эту ошибку:Задержка задания - задание не может быть создано для записи без сохранения после уничтожения объекта
ArgumentError (job cannot be created for non-persisted record:
#<Review id: 44, review: "Bad", rating: 1, reviewable_id: 2,
reviewable_type: "Spot", user_id: 1, created_at: "2016-05-30 17:13:29",
updated_at: "2016-05-30 17:13:29">):
app/controllers/reviews_controller.rb:40:in `destroy'
У меня есть следующий код:
# reviews_controller.rb
class ReviewsController < ApplicationController
def destroy
review.destroy
flash[:success] = t("reviews.destroy.success")
end
end
# review.rb
class Review < ActiveRecord::Base
after_destroy :calculate_overall_rating
def calculate_overall_rating
if number_of_reviews > 0
reviewable.update_attribute(:overall_rating, overall_rating)
else
reviewable.update_attribute(:overall_rating, 0)
end
end
handle_asynchronously :calculate_overall_rating
end
Хорошо отметить, что calculate_overall_rating
Безразлично 't требуется объект Review
.
Если я удалю handle_asynchronously :calculate_overall_rating
, он будет работать и пересчитывать. Но я пытаюсь отложить эту работу.