Rails Rails 5 里的 Parameters 不再继承自 Hash

adamshen · 2016年04月19日 · 最后由 springwq 回复于 2016年04月19日 · 3252 次阅读

url_for 里多了一段检验 parameters 是否 permit 的语句

when ActionController::Parameters
   unless options.permitted?
     raise ArgumentError.new("Generating a URL from non sanitized request parameters is insecure!")
   end
   route_name = options.delete :use_route
   _routes.url_for(options.to_h.symbolize_keys.
                   reverse_merge!(url_options), route_name)

有很多 Gem 都使用了 params 再 merge 一些设置动态生成 url,这时会 rasie 上面这个错误。

解决这个问题,除了 permit 参数以外,还可以用 to_unsafe_h 直接将 Parameters 转成 hash。

今天也碰到这个问题,Rails 5 的 安全性又提高了。另外 params.merge! 这个方法将被移除,可用 params.merge 代替,然后需要什么参数再 permit 参数的 key

需要 登录 后方可回复, 如果你还没有账号请 注册新账号