我之前在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
因此,简而言之,我希望能够找到特定列表的订单,然后循环并将每个已完成订单的价格(定义为我的数据库中的金额)相加。
我的问题是确定具体的商品详情。我很感激任何帮助。感谢
答案 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 %>