2011-01-29 46 views
0

不確定這是行不通的。理想化如何在.each_with_index中調用索引

>> params[:payments][:"1"] 
    {":amount_paid"=>"100.00", ":date_paid"=>"5/8/2008"} 

但如果我寫這個..

>> params[:payments].each_with_index{|item, idx| item[:"#{idx}"]} 
TypeError Exception: Symbol as array index 

,我要做到這一點:

>> params[:payments] 
{"0"=>{":amount_paid"=>"80.00", ":date_paid"=>"2/27/2008"}, "1"=>{":amount_paid"=>"100.00", ":date_paid"=>"5/8/2008"}} 

這樣我就可以調用特定的對象與此

params[:payments].each_with_index do |item, idx|  
    @calc.payments[idx][:date_paid] = item[:"#{idx}"][":amount_paid"] 
    @calc.payments[idx][:amount_paid] = (item[:"#{idx}"][":amount_paid"]).to_f 
end 

更新:

基於一些答案,I'ved試過這樣:

params[:payments].each{|k,v| @calc.payments[k.to_i] = v[":amounts_paid"]} 

這原來@calc.payments到:

nil 
nil 

備份雖然,其他人似乎工作..

>> params[:payments].each{|k,v| p v[":amount_paid"]} 
"80.00" 
"100.00" 

而這一個..

>> params[:payments].each{|k,v| p @calc.payments[k.to_i]} 
{:date_awarded=>"1/2/2008", :judgement_balance=>1955.96} 
nil 

如何在循環中訪問item[idx]

回答

1
params[:payments].each do |k,v| 
    puts "Item %d amount=%s date=%s\n" % [k, v[":amount_paid"], v[":date_paid"]] 
end 
Item 0 amount=80.00 date=2/27/2008 
Item 1 amount=100.00 date=5/8/2008 

更新:

好,好,這裏是一個完整的程序..腳本..你可以實際運行。 由於您試圖理解Ruby,我認爲您應該在Rails之外使用它幾分鐘。無論如何,我嘲笑了@calc.payments。這段代碼將運行,顯然做你想要的。

require 'pp' 
(params = {})[:payments] = {"0"=>{":amount_paid"=>"80.00", ":date_paid"=>"2/27/2008"}, "1"=>{":amount_paid"=>"100.00", ":date_paid"=>"5/8/2008"}} 
pp params 
class T; attr_accessor :payments; end 
(@calc = T.new).payments = [] 
params[:payments].each do |k,v| 
    i = k.to_i 
    @calc.payments[i] ||= {} 
    @calc.payments[i][:date_paid] = v[":date_paid"] 
    @calc.payments[i][:amount_paid] = v[":date_paid"].to_f 
end 
pp @calc.payments 

如果你運行它,你應該看到:

{:payments=> 
    {"0"=>{":amount_paid"=>"80.00", ":date_paid"=>"2/27/2008"}, 
    "1"=>{":amount_paid"=>"100.00", ":date_paid"=>"5/8/2008"}}} 
[{:date_paid=>"2/27/2008", :amount_paid=>2.0}, 
{:date_paid=>"5/8/2008", :amount_paid=>5.0}] 
+0

末尾我不知道它是否可能使用您用來編寫我正在上面工作的參數的變量注入。那是SQL嗎?以前從未見過。 – Trip

+0

非常感謝DigitalRoss! – Trip

0

你可以做一個這樣的訪問值。由於params[:payments]包含一個散列,因此對於每次傳遞,key將被分配「0」,「1」等,並且value將被分配散列amount_paiddate_paid

params[:payments].each do |key, value| 
    amount_paid = value[":amount_paid"] 
    ... 
end 
+0

更新我的回答似乎above..still不被工作.. – Trip

+0

第一行中更新的代碼可能需要一個'.to_f'在'v [「:quantities_paid」]' –