Comment faire pour enregistrer un modèle sans rappels dans les Rails

J'ai besoin de calculer des valeurs lors de l'enregistrement d'un modèle dans les Rails. J'appelle donc calculate_averages comme un rappel pour un Survey classe:

before_save :calculate_averages

Cependant, de temps en temps (et d'abord j'ai 10k enregistrements qui ont besoin de cette opération) j'ai besoin de mettre à jour manuellement toutes les moyennes pour chaque enregistrement. Pas de problème, j'ai le code suivant:

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

Avant même l'exécution de ce code, je suis inquiet du calculate_averages va devenir appelé et dupliquer ce et même, probablement, la cause de quelques problèmes avec la façon dont je fais les choses. Ok, donc je pense que, bien, je vais juste ne rien faire et laisser calculate_averages appelée et faire sa chose. Problème il y a, d'abord, est-il un moyen de forcer les rappels à obtenir, même si vous n'avez pas fait de modifications à l'enregistrement?

Deuxièmement, la façon dont les moyennes sont calculées c'est loin plus efficace tout simplement de ne pas laisser les rappels appelée à tous et ne les moyennes pour tout à la fois. Est-ce possible de ne pas laisser les rappels appelée?

  • Si vous avez 10k enregistrements à mettre à jour, alors pourquoi ne pas contourner AR complètement et il suffit de faire une simple mise à JOUR SQL? Surtout si vous souhaitez ignorer les rappels.
  • J'ai simplifié les calculs j'ai besoin de le faire, mais ils sont complexes et dépendent d'autres dossiers de trop. J'ai besoin de Ruby pour cela.
InformationsquelleAutor at. | 2014-01-27