2011-10-18 4 views
2

からの悪い出力:ルビー - 私は、これらのテキスト入力の多くが付いている形持っ配列

<%= text_field_tag 'name[seq]['+dat.id.to_s+']', dat.seq%> 

した後、私はデータベースに保存したいこのフォームを送信するには、私は、各入力から値を取得しようループ:

unless params[:name].nil? 
    params[:name][:seq].each_with_index do |sq, i| 
    puts sq 
    end 
end 

しかし、私は値

<% = text_field_tagと入力している場合、端末における出力は、例えば、間違っています'名[配列] [25]'、3%>

だから私は、出力がで期待するつもりですが、私は端末に、この取得します:

25 
3 

はここで何かですが重要な、私は見ていないものは?

答えて

1

はい、あなたは何かが欠けています。 each_with_indexブロック内では、sqが配列になるため、その出力が得られます。

ここでは何が起こっていますか?さて、あなたのparamsは、この含まれています:

"name" => { "seq" => { "25" => "3" } } 

をそして、それはparams[:name][:seq]がこのであることを意味します

{ "25" => "3" } 

その後、あなたはハッシュを反復処理することにeach_with_indexを適用します。あなたがこれを好きなら、

params[:name][:seq].each_with_index do |(k,v), i| 
    puts "-#{k}-#{v}-" 
end 

あなたは何が起こっているか見るでしょう。あなただけ3は、あなたが上記のようにparams[:name][:seq]を反復処理することができますし、'25'は、いくつかの他の方法が何であるかを知っていれば、単に、ブロック内v見たりしたい場合は

、あなただけまっすぐにそこに行くことができます:

three = params[:name][:seq]['25'] 
+0

ありがとう、そういう意味...インデックス**私**は完全に役に立たない、そうですか? – user984621

+0

@ user984621:あまり役に立たない、ちょうど 'each'はおそらくあなたも同様にあなたをやってくれるでしょう。 –

関連する問題