2011-11-08 15 views
11

Mi tabla denominada stocks contiene product_id, color_id, storage_id and in_stock como columnas.Cómo agrupar la colección por columnas con rieles

Para un producto determinado Quiero grupo de todas las existencias de almacenamiento, a continuación, para cada almacenamiento Quiero mostrar producto (color): in_stock

¿Cómo debería escribir un método y el modo de hacer?

Respuesta

20
<% Stock.all.group_by(&:storage).each do |storage, products| %> 
    Storage: <%= storage %> 
    <% products.each do |product| %> 
    (<%= product.color_id %>): <%= product.in_stock %> 
    <% end %> 
<% end %> 

Editar: actualizado para utilizar ERB, y in_stock como un número y no un sí booleanos/ninguna columna, y utilizar en su lugar de color_id color.name debido a que se supone que tiene una relación con un color .

+0

Hola, gracias por su respuesta. A través de la consola funciona como se esperaba, sin embargo, a través de la interfaz de usuario muestra '# {# => [# , # , # ] ... 'Parece que se queja de una relación, pero no está seguro de cuál. ¿Alguna idea? – Gaelle

+0

@Gaelle He actualizado mi respuesta para usar ERB y un par de pistas de este comentario. Si tiene más problemas, sea más descriptivo. Si tiene un mensaje de error, publíquelo. – Unixmonkey

1

No está estructurado exactamente cómo lo necesita (no hay suficiente información de su publicación), pero algo como esto tal vez?

items = Stock.select('color_id, in_stock').group('stocks.storage_id').where(:product_id => foo) 

items.each {|item| puts "(#{lookup_color(item.color_id)}): #{in_stock}"