Rails:在请求命中控制器之前操纵URL查询参数密钥

时间:2015-03-20 19:56:58

标签: ruby-on-rails ruby-on-rails-4 query-string strong-parameters url-parameters

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

由于参数较强,控制器需要以用户[名称],用户[电子邮件]的形式提供参数。但是,此第三方服务阻止在param键中使用方括号。

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

思想?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为只需要一些简单的手动解决方案就可以了。

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 }