2011-01-22 63 views
1

我有一個方法來歸納作者所欠的一些數據。在Ruby on Rails中從模型中的方法返回數組3

它的工作原理是這樣的:

calculate_royalty(object_id) 

現在,我使用它在一個視圖中,並通過每個作者的產品循環和吐出一個數字。像這樣:

<%= @author.products.each do |product| %> 
    <%= @author.calculate_royalty(product.id) %> 
<% end %> 

現在,這給了我一個數字。我一直試圖做的是將所有這些數字加載到我的模型中的數組中,這樣我就可以完成它們。 I trid this:

def total_author_royalties 
    products do |p| 
    calculate_royalty(p.id) 
    end 
end 

但是該數組只是作爲該作者的產品對象的散列值返回。我想,一旦我有數組中的值,我可以使用Array.inject將它們全部添加。

回答

2

好吧,如果calculate_royalty只是返回一個數字,那麼在你的循環中你不會將它分配給任何東西,它只會返回並消失。嘗試在最後互推版稅到一個數組,然後合計起來,像這樣:

def total_author_royalties 
    royalties = [] 
    products.each do |p| 
    royalties << calculate_royalty(p.id) 
    end 
    royalties.sum 
end 

或更簡潔的版本:

def total_author_royalties 
    products.map{|p| calculate_royalty(p.id)}.sum 
end 
+0

這工作非常出色。爲什麼地圖在這種情況下是合適的選擇,而不是.inject? – Slick23 2011-01-22 23:20:34