2011-11-16 17 views
5

È possibile interrogare le modifiche non salvate utilizzando ActiveRecord di Rail o un altro approccio simile?Utilizzo di Rails ActiveRecord per interrogare gli oggetti non salvati

Un esempio di una sessione interattiva di Ruby è riportata di seguito. Quello che mi piacerebbe vedere è che la quarta riga mostra un risultato di "999" invece di "10". Sono abituato ad usare .NET ed Entity Framework dove qualcosa di simile a questo era possibile. Forse in Ruby c'è un modo migliore o diverso di fare la stessa cosa. Potrei ovviamente sommare la somma in un ciclo, ma trovo la sintassi della query più elegante. Qualsiasi aiuto è apprezzato.

i = Inventory.where(:product_id => 1) 
i.sum(:available) => 10 
i.first.available = 999 
i.sum(:available) => 10 
+0

ho usato la sintassi standard di Ruby on mie ActiveRecords invece di usare la sintassi ActiveRecord. Il frammento di seguito fa qualcosa di molto simile a quello che avevo inteso quando ho posto la domanda. self.order_pickpacks.find_all {| pickpack | pickpack.product_id == product_id} .inject (0) {| sum, item | somma + oggetto.qualità} – kstevens715

risposta

4

No, dal momento che è in realtà sum() tradotto a SQL ed eseguire sul db, è necessario salvare il record per il db in modo che la query per restituire il risultato desiderato.

In alternativa, è possibile utilizzare il metodo Enumerable#sum in ActiveSupport, che prende un blocco, in questo modo:

all = Inventory.where(:product_id => 1).to_a 
all.first.available = 999 
all.sum(&:available) 
Problemi correlati