Rails 4およびdelayed_job 4.1.2。レビューを破棄した後の総合評価の再計算を遅らせようとしますが、レビューオブジェクトを破棄した後にレビューオブジェクトのIDがないためです。だから、オブジェクトを破壊しようとした後たびに、それが遅延ジョブを作成しようとしますが、このエラーがスローされます。遅延ジョブ - オブジェクトを破棄した後に非永続レコードに対してジョブを作成できません。
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
doesnのことに注意することは良いことですReview
オブジェクトが必要です。
handle_asynchronously :calculate_overall_rating
を削除しても、再計算されます。しかし、私はこの仕事を延期しようとしています。