Senden eines Codeblocks an eine dynamische find_all -Methode
-
05-07-2019 - |
Frage
Ich arbeite mit einigen komplexen Abfragen mit der dynamischen Find_all -Methode und erreichte einen Punkt, an dem das Senden eines Blocks an diese find_all -Methode meinen Code wirklich vereinfacht.
Gibt es ein Plugin oder eine Arbeit, die sich damit befasst?
In einfachen Worten würde ich gerne so etwas tun wie:
@products = Product.find_all_by_ids(ids, .....) do |p|
# do something to each product like
p.stock += 10
end
Jeder andere Leitfaden oder eine bessere Möglichkeit, dies zu tun, wäre sehr geschätzt.
Lösung
Rails 2.3 führte die vor find_in_batches
und find_each
Methoden (siehe hier) Für die Batch -Verarbeitung vieler Datensätze.
Sie können also Dinge wie:
Person.find_each(:conditions => "age > 21") do |person|
person.party_all_night!
end
Andere Tipps
Ich verwende das .each
Methode, die aufzählbar ist wie
@products = Product.find_all_by_ids(ids, .....)
@products.each { |p| p.stock += 10 }
Es gibt sogar einige Erweiterungen auf Aufzählung Diese Schienen bieten Ihnen möglicherweise ein bisschen helfen, wenn Sie ein paar gemeinsame Sachen machen.
Vergessen Sie auch nicht, Ihre Objekte mit so etwas zu speichern p.save
Wenn Sie möchten, dass die Änderungen tatsächlich bestehen bleiben.
Was ist los daran:
@products = Product.find_all_by_ids(ids).each do |p|
p.stock+=10
end
Für den Fall, dass Sie es nicht wussten, gibt jeder das Array zurück.