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?