2011-01-29 2 views
0

これは動作していないのか分かりません。どのようにインデックスを.each_with_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][:"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].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 

更新:

...しかし、他の人が動作するようには思え

バックアップ
nil 
nil 

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

これはに@calc.paymentsを回す:

はいくつかの回答に基づいて、I'vedはこれを試してみました

>> 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 

更新:

[OK]を、[OK]を、ここでは完全なプログラムは、あなたが実際に実行できることをスクリプト..です。 あなたはRubyの意味を理解しようとしているので、私はあなたがRailsの外で2,338分の間にそれを扱うべきだと思います。私はそれが何であれ@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 '.to_f'を必要とするかもしれない、あなたの更新されたコードに... – Trip

+0

最初の行を働いていないようです'v [":amount_paid "]'の末尾にある –

関連する問題