我目前有一个订单和图片模型,如下所示:
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
答案 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,... }