Nouveau sur rails/ruby (en utilisant les rails 3 et ruby 1.9.2), et j'essaie de me débarrasser de certaines requêtes inutiles en cours d'exécution.Rails/Enregistrement actif .save! question d'efficacité
Quand je suis en cours d'exécution un chacun fait:
apples.to_a.each do |apple|
new_apple = apple.clone
new_apple.save!
end
et je consulter le journal sql, je vois trois instructions select suivie d'une instruction d'insertion. Les instructions select semblent complètement inutiles. Par exemple, ils sont quelque chose comme:
SELECT Fruit. * À partir de fruits où Fruit.ID = 5 LIMITE 1;
SELECT Couleur. * À partir de Couleurs où Color.ID = 6 LIMIT 1;
SELECT TreeType. * À partir de TreeTypes où TreeType.ID = 7 LIMIT 1;
INSERT dans les valeurs Apples (Fruit_id, color_id, treetype_id) (6, 7, 8) RETURNING "id";
Apparemment, cela ne prendrait pas beaucoup de temps, mais quand j'ai des insertions de 70k à courir, je parie que ces trois sélections pour chaque insertion prendront un temps décent.
Je me demande donc les suivantes:
- Est-ce typique de ActiveRecord/Rails .Save! méthode, ou le développeur précédent a-t-il ajouté un code personnalisé?
- Ces trois instructions de sélection, exécutées pour chaque élément, entraîneraient-elles une perte de temps notable?
- S'il est intégré dans des rails/enregistrement actif, serait-il facilement contourné, si cela le rendrait plus efficace?
Pour être juste, ActiveRecord ne fait que ce que vous lui dites de faire même si parfois vous faites pas réaliser ce que vous lui dites de faire. – tadman