Rails 4 und delayed_job 4.1.2. Ich versuche, die Neuberechnung der Gesamtbewertung nach dem Zerstören einer Überprüfung zu verzögern, aber offensichtlich, weil nach dem Zerstören eines Überprüfungsobjekts keine ID für das Überprüfungsobjekt vorhanden ist. Also jedes Mal, nachdem er versucht, ein Objekt zu zerstören, versucht es, eine verzögerte Job zu schaffen, sondern wirft diesen Fehler:Verzögerter Job - Job kann nicht für nicht persistenten Datensatz nach dem Destroy-Objekt erstellt werden
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'
ich den folgenden Code haben:
# 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
Es ist gut zu beachten, dass die calculate_overall_rating
doesn benötige kein Review
Objekt.
Wenn ich handle_asynchronously :calculate_overall_rating
entfernen, wird es funktionieren, und neu berechnen. Aber ich versuche diesen Job zu verzögern.