2012-03-05 53 views
0

我有產品和Statement_Sales的模型,並希望執行各種總和組操作,以在我的視圖中呈現銷售報告和基本分析。哪裏是放置這些模型或控制器的最佳位置,以及如何在我的視圖中訪問它們?銷售金額/分組 - 在哪裏執行這些功能?

此刻,我可以通過網上銷售日期使用這樣的事情在我看來很容易帶來行:

<% @product.statement_sales.each do |sales| %> 
<td><%= sales.units %></td> 
<% end %> 

但這是一行行數據,我希望能夠首先給出一個總的日期,然後總計7天,1月,3月,1年等等等等

在控制檯中我一直在使用想出按日期分組:

p.statement_sales.group(:date).sum(:units) 

不知道如何把那個帶入到t他的應用程序,並超越一個日期分組。

相當新的Rails(經過多年的PHP),所以用不同的方法擊中了幾堵牆。我確定這其實很簡單!提前致謝。

回答

0

經驗法則是「胖模型,瘦身控制器」。這意味着您應該將大部分邏輯推入模型中,並儘可能簡化控制器的操作。

對於你特殊的情況,你會想看看Rails scopes。範圍允許您封裝並重用複雜的查詢,例如上面描述的查詢。例如,假設你有一個StatementSale模型belongs_to一個Product(我不知道你的對象圖的細節):

class StatementSale < ActiveRecord::Base 
    scope :units_by_date, group(:date).sum(:units) 
end 

這將允許你打電話@product.statement_sales.units_by_date在您的視圖。

您還可以構建一個帶參數的作用域。例如,假設你希望能夠通過動態的參數傳遞給組,您的範圍將是這樣的:

scope :units_grouped_by, lambda { |p| group(p).sum(:units) }

不知道你想要的更復雜的查詢的詳細信息執行,範圍絕對是容納所有這些邏輯的地方。

+0

謝謝,請試試看。 – Raoot 2012-03-05 15:10:19

+0

範圍方法似乎不起作用,我得到一個錯誤。但嘗試了似乎工作的follwoing:def self.units_by_date 組(:date).sum(:units) end – Raoot 2012-03-05 15:29:10

+0

您看到的錯誤是什麼?添加類方法是使用範圍的替代方法,但您應該可以互換使用。 – 2012-03-05 16:48:00