将Activerecord结果合并到Ruby中

时间:2012-01-08 17:05:42

标签: ruby-on-rails ruby activerecord

我目前有一个订单和图片模型,如下所示:

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 个答案:

答案 0 :(得分:1)

您可以尝试使用group_by

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

应该做的伎俩。 images是一组对象,其值为format

答案 1 :(得分:1)

您可以使用association extensions

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,... }