2017-09-12 123 views
1

我在嘗試瞭解Rails開箱即用的委託方法。這是我想要做的。所以,我有Accounts that_many Tasks。所以我試圖得到帳戶的任務計數,這裏是我目前如何做:理解rails委託方法

def total_tasks 
    tasks.count 
end 

很標準的事情。但我試圖將此方法移至委託方法。我試過這個,但它不起作用

delegate :count, to: :task, prefix: "total" 

這並沒有工作,我真的沒有想到它會這樣做。有什麼辦法可以做到這一點?

+0

我認爲你的第一個解決方案比代表團更好,因爲它增加了可讀性。 「Accounts#total_tasks'比'Accounts#total_count'(委託方法)更有意義,因爲我不確定我在計算什麼。另外我同意@max'size'是比'count'更好的選擇,以避免不必要的數據庫訪問 – engineersmnky

回答

5
delegate :count, to: :tasks, prefix: "total" 

這是創建一個方法只是元編程:雖然

def total_count 
    tasks.send(:count) 
end 

這是不是一個真正的好適合代表你應該使用size代替count,因爲後者總是會導致一個DB即使關聯已經被加載,查詢也是如此。

def tasks_total 
    tasks.size # prevents n+1 query issue. 
end 

爲什麼你想爲此創建一個方法超出了我,儘管它實際上是一個多字符類型。

+1

從技術上講,它會是'total_count'並帶有下劃線,但我同意你的完整情緒 – engineersmnky