2011-04-30 8 views
5

Tengo una aplicación de Rails 3 donde mi modelo incluye Propietarios y Propiedades, cada propietario representa a una persona o institución que posee una o más propiedades.¿Cómo puedo seleccionar una SUM en una consulta usando Rails 3/MetaSearch?

Me gustaría poder buscar en mi base de datos (SQLite3) y devolver los resultados agrupados por el propietario. Para cada grupo, me gustaría mostrar:

-El nombre del propietario (puedo hacerlo fácilmente) -El número total de propiedades que pertenecen a este propietario que cumplen con las condiciones de búsqueda (es decir, un recuento). -El valor total de todas las propiedades contadas en la columna anterior (es decir, una suma).

Propietario has_many Propiedades y propiedad belongs_to Propietario. Además, "valor" es un atributo para Propiedad.

Estoy usando la gema MetaSearch, y puedo conseguir que devuelva una colección de propiedades correctamente. También puedo conseguir que agrupe los resultados por propietario, pero no puedo averiguar cómo mostrar el número de propiedades y su valor sumado.

Este es el código para devolver la lista de propiedades:

@search = Property.group("owner_id").search(params[:search]) 

He intentado añadir un .select a la cadena como esta:

@search = Property.select("SUM(value) as mysum").group("owner_id").search(params[:search]) 

Pero no puedo acceder a esta suma cuando lo intento ¿Alguien sabe de una manera eficiente de manejar esta situación?

Respuesta

11

Me doy cuenta de que esto es antiguo, pero es alto en los resultados de búsqueda de Google.

Simplemente puede llamar a sum. En cuanto a su ejemplo, lo siguiente es aproximadamente lo que estás buscando:

Property.where(SEARCH_VALUES).sum(:value).group(:owner_id) 

http://guides.rubyonrails.org/active_record_querying.html#sum

Cuestiones relacionadas