2 から 3.2 にアップグレードした RoR アプリケーションがあり、最終的にはすべて修正されましたが、form_tag から奇妙な動作が発生しました。
フォーム コードは次のとおりです。
<%= form_tag '/public/checkem' do %>
<%= hidden_field "vals", value = picks.draw %>
<%= hidden_field "val_index", value = xcount %>
<%= submit_tag picks.draw_date %>
<% end %>
picks.draw は配列で、実行すると次のように生成されます。
<form accept-charset="UTF-8" action="/public/checkem" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="ET8OgURJpwvnQ+18lK1xKaFXTBLMuMXVw4AoM/gVEYw=" /></div>
<input id="vals_6,16,45,54,60,15" name="vals[6,16,45,54,60,15]" type="hidden" />
<input id="val_index_5" name="val_index[5]" type="hidden" />
<input name="commit" type="submit" value="10/25/2013" />
</form>
非表示の入力 (vals) には数値の配列が含まれているという考えです。この値は /public/checkem 関数で配列として正しく処理されますが、再レンダリングされると次のようになります。
<span class="elem" style="background-color: #b0b040; color: #000000;"><%=@xpicks[0]%></span>
@xpicks[0] は配列の最初の要素です
<span class="elem" style="background-color: #b0b040; color: #000000;">{"2</span>
ハッシュの始まりのように見えるものがピックアップされます。ログファイルを見ると、フォームが送信されたときに配列がハッシュに変更されたことを確認する次の行が表示されます。
Processing by PublicController#checkem as HTML
Parameters: {"utf8"=>"?", "authenticity_token"=>"ET8OgURJpwvnQ+18lK1xKaFXTBLMuMXVw4AoM/gVEYw=", "vals"=>{"2,11,42,64,74,2"=>""}, "val_index"=>{"1"=>""}, "commit"=>"11/05/2013"}
これはすべてバージョン 2 で正常に機能しましたが、配列がハッシュとして渡される場所や理由がわかりません。