2011-11-16 13 views
5

Czy można wysyłać zapytania o niezapisane zmiany za pomocą ActiveRecord Rail lub innego podobnego podejścia?Używanie Railsów ActiveRecord do zapytania Niezapisanych obiektów

Przykład sesji interaktywnej Rubiego znajduje się poniżej. Co chciałbym zobaczyć, to czwarta linia pokazuje wynik "999" zamiast "10". Używam .NET i Entity Framework, gdzie coś podobnego było możliwe. Być może w Ruby jest lepszy lub inny sposób na zrobienie tego samego. Mogę oczywiście dodać sumę w pętli, ale uważam, że składnia zapytania jest bardziej elegancka. Każda pomoc jest doceniana.

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

użyłem standardowej składni Ruby na moich ActiveRecords zamiast używać składni ActiveRecord. Poniższy fragment robi coś bardzo podobnego do tego, co zamierzałem, gdy zadałem pytanie. self.order_pickpacks.find_all {| pickpack | pickpack.product_id == product_id} .inject (0) {| sum, item | sum + item.quantity} – kstevens715

Odpowiedz

4

Nie, ponieważ sum() faktycznie przetłumaczone na SQL i uruchomić na db, trzeba zapisać rekord do DB w celu zapytania, aby powrócić wynik chcesz.

Alternatywnie, można użyć metody Enumerable#sum w ActiveSupport, która przyjmuje blok, tak:

all = Inventory.where(:product_id => 1).to_a 
all.first.available = 999 
all.sum(&:available) 
Powiązane problemy