Rails:在请求到达控制器之前操作 URL 查询参数键

Rails: manipulate URL query param keys before request hits controller

我需要将 url 中的一些参数从第 3 方服务传递到 User#new

由于强参数,控制器需要用户[姓名]、用户[电子邮件]形式的参数。但是,此第 3 方服务阻止在参数键中使用方括号。

什么是最简单的 Rails-y 解决此问题的方法?也许在 Rails 路由器中?我想在请求被控制器拒绝之前将 email=abc@example.com 转换为 user[email]=abc@example.com

想法?

谢谢!

我认为最好是一些简单的手动解决方案。

def user_params
  permitted_params = [:name, :email, :first_name, :last_name]
  params[:user].reverse_merge!(params.keep_if { |k,v| k.to_sym.in? permitted_params })
  params.require(:user).permit(*permitted_params)
end

如果 params[:user] 为零,您可以这样做: params[:user] ||= {} 合并之前的某处。

或者这样:params[:user] = (params[:user] || {}).reverse_merge(params.keep_if { |k,v| k.to_sym.in? permitted_params }