2010-08-16 62 views
1

這裏不能確定我的Ruby語法。如何在ActiveRecord類方法中使用'map'方法?

我想定義一個方法,我可以這樣調用:client.invoices.average_turnaround。所以我的average_turnaround方法需要使用ActiveRecord對象的集合。

這裏是我的代碼迄今:

class Invoice < ActiveRecord::Base 
    ... 
    def self.average_turnaround 
    return self.map(&:turnaround).inject(:+)/self.count 
    end 
end 

所以我試圖找到週轉時間的總和爲每張發票,然後通過發票的總數除以它。

Ruby抱怨沒有mapClass定義的方法。我期待selfArray

如何編寫對Invoices集合起作用並使用map函數的方法?我哪裏錯了?

+2

自己不會是類內發票的數組。這將是課程本身。 – 2010-08-16 11:19:42

回答

3

您定義了一個類方法,該方法在類本身上調用。你需要的是一個association extension。如果你想在類方法中使用的地圖,而不是通過關聯擴展

class Client < ActiveRecord::Base 
    has_many :invoices do 
    def average_turnaround 
     return map(&:turnaround).inject(:+)/count 
    end  
    end 
+0

神奇 - 在Rails謎題中的另一個有用的作品:) – nfm 2010-08-16 11:50:56

4

:該方法應該在客戶端模型定義如下。例如,如果直接呼叫Invoice.average_turnaroundInvoice.where(x: y).average_turnaround是有用的。在map之前放置all.。使用average_turnaround使用任何集合。