2011-11-08 35 views
11

Bảng của tôi có tên là cổ phiếu chứa product_id, color_id, storage_id and in_stock làm cột.Cách thu thập nhóm theo cột có đường ray

Đối với một sản phẩm nhất định tôi muốn nhóm các cổ phiếu bằng cách lưu trữ, sau đó cho từng lưu trữ Tôi muốn hiển thị sản phẩm (màu sắc): in_stock

Làm thế nào nên tôi viết một phương pháp và làm thế nào để render?

Trả lời

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

Edit: cập nhật để sử dụng ERB, và in_stock như một số và không phải là một vâng boolean/không có cột, và sử dụng color_id ở vị trí của color.name vì đó giả sử bạn có một mối quan hệ với một màu .

+0

Xin chào, cảm ơn bạn đã trả lời. Thông qua giao diện điều khiển nó hoạt động như mong đợi tuy nhiên thông qua giao diện người dùng nó ám '# {# => [# , # , # ] ... 'Có vẻ như nó phàn nàn về mối quan hệ nhưng không chắc chắn cái nào. Bất kỳ ý tưởng? – Gaelle

+0

@Gaelle Tôi đã cập nhật câu trả lời của mình để sử dụng ERB và một vài manh mối từ nhận xét này. Nếu bạn có nhiều vấn đề hơn, hãy mô tả chi tiết hơn. Nếu bạn có thông báo lỗi, vui lòng đăng nó. – Unixmonkey

1

Không được cấu trúc chính xác cách bạn cần (không đủ thông tin từ bài đăng của bạn), nhưng có lẽ như thế này?

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}" 
Các vấn đề liên quan