Делать для суммирования один и тот же элемент и отображать t с paginating_find? - PullRequest
0 голосов
/ 21 февраля 2010

Например, тестовая таблица

|id|name   |item_id|num|
|1 |apple  |1      |1  |
|2 |orenge |2      |1  |
|3 |orenge |2      |1  |
|4 |pear   |3      |1  |
|5 |apple  |1      |1  |
.....

В контроллере,

@items = Test.find(:all, :page=>{:size=>20, :current=>params[:page]}) 

Я использую плагин paginating_find.

В поле зрения,

<% @items.each do |item| %>
<%=h item.name %> x <%= item.num %><br />
<% end %>
<%= link_to "before", {:page => @items.previous_page} if @items.previous_page? %>
<%= paginating_links(@items, :window_size => 20) %>
<%= link_to "next", {:page => @items.next_page} if @items.next_page? %> 

apple x 1
orenge x 1
orenge x 1
pear x 1
apple x 1

.....

Как мне поступить, чтобы добраться до пути ниже? (Структура таблицы не изменилась.)

apple x 2
orenge x 2
pear x 1
.....

1 Ответ

0 голосов
/ 21 февраля 2010

Вы можете использовать сумму с параметром :group для суммирования всех элементов с одинаковым именем:

@items = Test.sum("count", :group => "name")

Это даст вам OrderedHash вида name => count. Затем вы можете повторить это в представлении.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...