So speichern Sie ein Modell, ohne Callbacks in Rails auszuführen

Ich muss Werte berechnen, wenn ich ein Modell in Rails speichere. Also rufe ich ancalculate_averages als Rückruf für aSurvey Klasse:

before_save :calculate_averages

Gelegentlich (und anfangs habe ich 10.000 Datensätze, die diese Operation benötigen) muss ich jedoch alle Durchschnittswerte für jeden Datensatz manuell aktualisieren. Kein Problem, ich habe folgenden Code:

Survey.all.each do |survey|
  survey.some_average = (survey.some_value + survey.some_other_value) / 2.to_f
  #and some more averages...
  survey.save!
end

Bevor ich diesen Code überhaupt laufen lasse, mache ich mir Sorgen um diecalculate_averages wird aufgerufen und dupliziert und wahrscheinlich sogar Probleme mit der Art und Weise verursachen, wie ich Dinge tue. Ok, dann denke ich, nun, ich mache einfach nichts und lassecalculate_averages gerufen werden und sein Ding machen. Problem: Gibt es eine Möglichkeit, Rückrufe zu erzwingen, auch wenn Sie keine Änderungen am Datensatz vorgenommen haben?

Zweitens ist es die Art und Weise, wie Durchschnittswerte berechnet werdenweit Effizienter, als dass die Rückrufe überhaupt nicht abgerufen werden und die Durchschnittswerte für alles auf einmal ermittelt werden. Ist es möglich, Rückrufe nicht anrufen zu lassen?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage