raise unpermitted parameters error when try to awesome print ActionController::Parameters object
最近在自己的小專案裡面遇到這個問題,一下斷點看 params 就 raise error 給我。
會遇到這種情況的步驟是
- 你用了 Rails 5.1 以上的版本
- 你裝了
awesome_print
相關的套件,例如awesome_rails_console
- 然後你在 controller 下了類似
byebug
或binding.pry
能夠斷點的行為 - 你想在 console 輸出
params
看看傳了些什麼 - BOOM!!
You get some error
ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash
主要問題是現在 ActionController::Parameters 不像以前是給 hash,而是給一個 object,這在 rails 5.1 後強制改掉了,詳見 PR
你可以試試在 console 裡面 reproduces
ap ActionController::Parameters.new
# ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash
補充: ap
是 awesome_print 的 method
但如果換成 puts 就正常了…
puts ActionController::Parameters.new
# {}
# nil
合理推測 awesome_print 應該是會轉成 hash 來讓排版變好看?
追了一下 code,發現是在這裡被轉 hash 的,那恰巧碰上新的規定,在 unpermitted 前不能直接轉 hash 否則會 raise error 出來。
這個問題正在 awesome_print 開 PR 修復中,聽說要 merge 到 v2.0 之後 release
在此之前,如果要下斷點在 controller 又想看 params 的話,先用 params.to_unsafe_h
頂著吧 XD
或是乾脆移除這種排版的 GEM 也能根治。