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 }
我需要将 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 }