2011-11-16 15 views
5

¿Es posible consultar cambios no guardados utilizando el ActiveRecord de Rail u otro enfoque similar?Uso de Rails ActiveRecord para consultar objetos no guardados

A continuación figura un ejemplo de una sesión interactiva de Ruby. Lo que me gustaría ver es que la cuarta línea muestre un resultado de '999' en vez de '10'. Estoy acostumbrado a utilizar .NET y Entity Framework, donde algo similar a esto fue posible. Tal vez en Ruby haya una manera mejor o diferente de hacer lo mismo. Obviamente podría sumar la suma en un bucle, pero la sintaxis de la consulta me parece más elegante. Cualquier ayuda es apreciada.

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

utilicé la sintaxis estándar de Ruby en mis ActiveRecords en lugar de utilizar la sintaxis ActiveRecord. El siguiente fragmento hace algo muy similar a lo que pretendía cuando hice la pregunta. self.order_pickpacks.find_all {| pickpack | pickpack.product_id == product_id} .inject (0) {| sum, item | sum + item.quantity} – kstevens715

Respuesta

4

No, ya que es en realidad sum() traduce a SQL y ejecutar en la base de datos, debe guardar el registro en la base de datos para que la consulta para devolver el resultado que desea.

Como alternativa, puede utilizar el método Enumerable#sum en ActiveSupport, que tiene un bloque, así:

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