[Rails] 配列にしたHashをform_withでpostする
Hashを配列に入れてformでpostを試みると、Stringに変換されてしまいました。
JSON.parseで元に戻せないかと試してもうまくいきませんでしたが、一工夫でちゃんとpostできました。
解決方法
こちらを参考にさせていただきました。
postする前にto_jsonで変換すると、JSON.parseでStringからHashに変換することができました。
まず、配列内の全てのHashをto_jsonで変換します。
@hashs = hashs.map do |h| h.to_json end
次にViewでformを用いて配列をpostします。
<%= form_with url: hoge_path do |f|%> <% @hashs.each do |h| %> <%= f.hidden_field(:hashs, multiple: true, value: h )%> <% end %> <% end %>
postで配列の中のStringをJSON.parseを用いてHashに変換します。
hashs = params[:hashs] results = hashs.map do |h| JSON.parse(h) end
これでresultsは元のHashの配列になりました。