试图从特定列表中总计总收入

时间:2014-07-22 17:14:43

标签: ruby-on-rails

我之前在stackoverflow和codereview上问了这个问题,但我没有提供足够的信息或显示足够的代码。对于那个很抱歉。我是rails(以及一般编程)的新手,所以我为不注意所有要求而道歉。

我有卖家和买家的基本市场应用程序。用户可以创建列表和买家在列表上完成订单。

我想在商品页面上显示一些统计信息。我希望特定商家信息的总收入能够在其列表页面上显示。

我在订单模型中定义了收入如下:

def self.revenue
  Order.sum(:amount).to_f
end 

我用<%= number_to_currency Order.revenue, :precision => 0 %> 来称呼它 在列表的显示页面上。

当然,这只是显示每个已完成订单的总收入,而不是特定列表的收入,这就是我想要的。这就是我所得到的,因为我在订单模型中尝试的其他所有东西都没有取得任何成功。

我尝试通过以下方式找到具体的列表,但我很丢失,并且不知道在我的节目页面上调用它的正确方法。

@orders = Order.where(listing: @order.listing) 
@revenue = 0 
@orders.each do |order| 
@revenue = @revenue + order.listing.amount 
end 

因此,简而言之,我希望能够找到特定列表的订单,然后循环并将每个已完成订单的价格(定义为我的数据库中的金额)相加。

我的问题是确定具体的商品详情。我很感激任何帮助。感谢

2 个答案:

答案 0 :(得分:0)

您可以循环浏览每个商家信息并对订单revenus求和。

你需要这样的东西

在您的控制器中,您可以拥有以下内容:

@listings = Listing.all

并在你展示行动

<% @listings.each do |listing| %>

  <%= listing.orders.sum(:amount).to_f %>

<% end %>

答案 1 :(得分:0)

你可以在这里使用方便的inject方法:) 根据您的回答,您希望能够find orders of a specific listing and loop and add up the price

最好将它作为实例方法包装在模型中,因为你想在特定的列表中调用它。

class Listing < ActiveRecord::Base

def revenue
   orders.inject(0) {|sum, order| sum += order.amount.to_f}
end

end

然后,您可以在控制器中设置@listing变量,并在视图中调用<%= @listing.revenue %>