我試圖在通過每個循環迭代時將散列添加到數組。這裏是我的控制器代碼:我與掙扎的線路設置@royaltiesbychannel變量在每次循環:將散列推入循環中的數組中
def royalty(isbn)
sales_hash_by_channel = Sale.find_all_by_isbn_id(@isbn).group_by(&:channel_id)
sales_hash_by_channel.each do |ch_id, sale_array|
@royaltiesbychannel = Array.new()
value_total_by_channel = sale_array.sum(&:value)
quantity_total_by_channel = sale_array.sum(&:quantity)
@isbn.rules.each do |rule|
next unless rule.channel_id == ch_id
case quantity_total_by_channel
when 0..5000
@royaltiesbychannel = @royaltiesbychannel << {ch_id => value_total_by_channel * 0.5}
# (some other case-when statements)
end
end
end
在控制檯中,當我設置ch_id和價值,新的東西,推新值入陣:
@royaltiesbychannel = @royaltiesbychannel << {ch_id => value_total_by_channel * 0.5}
我得到散列的很好的數組:
[{1=>100000.0}, {2=>3000.0}]
然而,當我在視圖中做@ royaltiesbychannel.inspect,我得到的只是一個鍵 - 值對:
[{2=>3000.0}]
對於裁判:
@royaltiesbychannel.class = Array
@royaltiesbychannel.class = 1
@sales_hash_by_channel.class = Hash
@sales_hash_by_channel.size = 2
@isbn.rules.size = 4
所以它看起來像推入陣列覆蓋,而不是增加。我究竟做錯了什麼?我完全錯過了循環和.push的工作原理嗎?提前謝謝了。
首先,你應該把所有的邏輯放在你的模型中:) – corroded 2011-05-25 11:28:18
所以如此。我想知道讓事情先工作然後重構... – snowangel 2011-05-25 11:30:25
@royaltiesbychannel = @royaltiesbychannel << {ch_id => value_total_by_channel * 0.5}你爲什麼要將渠道的版稅等同於自己?你可以不使用=符號,這可能是你覆蓋了 – corroded 2011-05-25 11:32:04