Techioz Blog

Rubyはハッシュを角括弧付きの単一レイヤーに変更します

概要

ハッシュを取得しましたが、net/http に投稿するには、それをフラット形式に変換する必要があることがわかりました。

invoice = { :no => "100", :date => "08/08/2022", :client => {:name => "Foo" } }

なるだろう

params = { "invoice[no]" => "100", "invoice[date]" => "08/08/2022", "invoice[client][name]" => "Foo" }

これを自動的に行う方法はありますか? to_param と to_query 、 flatten 、 encode_www_form を試しましたが、この必要な形式に変換されません。

私が実行しているポストアクションは、Devise Tokens を使用して認可する Ruby On Rails バックエンドに対するものです。

res = Net::HTTP.post_form(uri, params)

解決策

CGI.parseメソッドが必要です。 HTTP クエリ文字列をキー => 値のペアのハッシュに解析します。

CGI.parse({ invoice: invoice }.to_query)

# => {"invoice[client][name]"=>["Foo"], "invoice[date]"=>["08/08/2022"], "invoice[no]"=>["100"]

値としての単一要素の配列は気にしないでください。それはうまくいきます

params = CGI.parse({ invoice: invoice }.to_query)
res = Net::HTTP.post_form(uri, params)