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。