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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top