Объединить результаты Activerecord в Ruby - PullRequest
0 голосов
/ 08 января 2012

У меня есть модель заказа и изображения, которая выглядит следующим образом:

class Order < ActiveRecord::Base
  has_many :images
end

class Image < ActiveRecord::Base
  belongs_to :order
end

Теперь я хотел бы сделать следующее:

<% @order.images.each do |image| %>
  <%= image.format %> x  
  <%= image.amount %>
  <%= number_to_currency(image.price) %><br/>
<% end %>

Это распечатывает это:

1x 30x30 € 1,00
1x 12x12 € 2,10
3x 30x30 € 3,00
4x 12x12 € 8,40

Я хотел бы объединить это по формату изображения и суммировать сумму и цену.Но я пробовал несколько методов, но ни один из них не работает, потому что @ order.images - это не простой массив, а объект Image.Вот чего я хотел бы достичь:

5x 12x12 € 10,50    
4x 30x30 € 4,00

Ответы [ 2 ]

1 голос
/ 08 января 2012

Вы можете использовать расширения ассоциации :

class Order < ActiveRecord::Base
  has_many :images do
    def by_format
      select('sum(amount) as amount_sum, sum(price) as price_sum').group('format')
    end
  end
end

И затем, в представлении:

@order.images.by_format.each { |i| i.format,... i.amount_sum, ..., i.price_sum,... }
1 голос
/ 08 января 2012

Вы можете попробовать использовать group_by:

@order.images.group_by(&:format).each do |format, images|
  <%= "#{images.length}x #{format} #{number_to_currency(images.sum(&:price))" %>
end

.images - это массив объектов с равными значениями format.

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