Nic Lin's Blog

喜歡在地上滾的工程師

如何解決在 awesome print 中遇到 ActionController::Parameters unable to convert unpermitted

raise unpermitted parameters error when try to awesome print ActionController::Parameters object

最近在自己的小專案裡面遇到這個問題,一下斷點看 params 就 raise error 給我。

會遇到這種情況的步驟是

  1. 你用了 Rails 5.1 以上的版本
  2. 你裝了 awesome_print 相關的套件,例如 awesome_rails_console
  3. 然後你在 controller 下了類似 byebugbinding.pry 能夠斷點的行為
  4. 你想在 console 輸出 params 看看傳了些什麼
  5. 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 也能根治。

參考資源

comments powered by Disqus