2016-02-24 45 views
2

我試圖編寫一個幫助器,它使用零值作爲零進行求和。趁着下面的方法從this answer.在.map()中使用變量

items.map(&:some_field).sum(&:to_i) 

的問題是,因爲我正在寫一個幫手,:some_field將需要傳過來的變量。那麼我如何在.map中使用該變量?像下面這樣:

items.map(&:send(field)).sum(&:to_i) 

任何提示,將不勝感激

+0

出於好奇,'物品'從哪裏來?如果來自單個模型(如'Item'),那麼我想知道你是否不能執行Item.sum(:field)'。即使'items'來自不同的模型,你也許可以使用'.sum(:field)',但這需要多一點工作。 – jvillian

回答

6

你可以繼續使用下面,我剛纔刪除的代碼

items.map(&field).sum(&:to_i) 

注「」的象徵。這裏字段是你的變量

+0

哇,你是對的;我發誓我嘗試過! – neanderslob

5

您應該簡單地手工編寫塊傳遞給map方法:

items.map { |item| item.public_send(field) }.sum(&:to_i) 

塊是在Ruby中關閉,所以如果有field局部變量在這個範圍內,它也可以在塊內部訪問。