雑多開発ブログ(仮)

[Rails] 配列にしたHashをform_withでpostする

Hashを配列に入れてformでpostを試みると、Stringに変換されてしまいました。
JSON.parseで元に戻せないかと試してもうまくいきませんでしたが、一工夫でちゃんとpostできました。

解決方法

こちらを参考にさせていただきました。

kei178.me

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の配列になりました。