コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsでそのままparamをhashにしたいときは一回permit!する

小ネタ。

環境

$ bundle exec rails -v
Rails 5.2.1

事例

paramsはそのままだと ActionController::Parameters なのでhashにまつわるクラスがつかえなかったりする

# binding.pryなどした例

params
# => <ActionController::Parameters {"contents"=>{"title"=>"hoge", "body"=>"huga"}, "controller"=>"main/contents", "action"=>"create"} permitted: false>

たとえば deep_stringify_keys とかが使えない

params.deep_stringify_keys

# NoMethodError: undefined method `deep_stringify_keys' for #<ActionController::Parameters:0x00007fb186fa4030>

そういう場合は一回permit!するとhash化できるようになるのでそうするといい。

params.permit!.to_h.deep_stringify_keys

# => {"contents"=>{"title"=>"hoge", "body"=>"huga"}, "controller"=>"main/contents", "action"=>"create"}

関連リンク