Ruby on rails count и group с помощью PostgreSQL - PullRequest
1 голос
/ 30 ноября 2011

Мне нужно выбрать и сгруппировать одну модель по различным столбцам.Моя Stock модель содержит variation_id, color_id, storage_id, in_stock.Должен работать с SQLite и Postgre

Я хочу группировать по вариациям, а затем по сумме хранения и отображать сумму in_stock

  • Вариант 1 (всего: 22)

    • Хранение A: 12
    • Хранение B: 10
  • Вариация 2 (всего: 234)

    • ХранениеA: 12
    • Хранение B: 10
    • Хранение C: 212

@stocks = Stock.locked.all

Какой виддолжен выглядеть?До сих пор я был в состоянии группировать по вариациям, но не знаю, как перебрать хранилище и выполнить вычисления.Как извлечь логику, чтобы переместить ее в модель?

<% @stocks.group_by(&:variation).each do |variation, stocks| %>
   <h2><%= variation.name %> (<%= variation.color.name %>)</h2>
<% end %>

* РЕДАКТИРОВАТЬ *

Переработан вид.Я получаю вариации и хранилища, но функция суммирования не работает undefined method '+' for #<Stock:0x007ff15a06cf68>

<% @stocks.group_by(&:variation).each do |variation, stocks| %>
  <h2><%= variation.name %> </h2>

  <% stocks.group_by(&:storage).each do |storage, stock| %>
    <li><%= storage.name %>: <%= stock.sum(:in_stock) %></li>
  <% end %>   
<% end %>

1 Ответ

1 голос
/ 02 декабря 2011

Данные выбраны правильно.Ошибка произошла из-за неправильного способа манипулирования возвращаемым массивом.Вот рабочий код.

<% @stocks.group_by(&:variation).each do |v, stocks| %>
  <h3 class="variations"><%= v.name %>: <%= stocks.map {|x| x.in_stock}.sum %></h3>
  <% stocks.group_by(&:storage).each do |storage, s| %>
    <li><%= storage.name %>: <%= s.map {|x| x.in_stock}.sum %></li>
  <% end %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...