使用 StrongParameters 将模型名称作为根键

Keeping model name as root key with StrongParameters

StrongParameters 是否有办法将模型名称保留为哈希根?

例如,当我提交创建用户的表单时,我的参数看起来像

<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"...", "user"=>{"full_name"=>"first last", "email"=>"me@example.com"}, "button"=>"", "controller"=>"admin/users", "action"=>"create"} permitted: false>

请注意它们包含 "user"=>{...}。 然而,在用 StrongParamyetes

对它们进行消毒后
  def user_params
    params.require(:user).permit(:full_name, :email)
  end

我明白了

<ActionController::Parameters {"full_name"=>"first last", "email"=>"me@example.com"} permitted: true>

没有 "user" 根键。

我知道,我可以手动添加

  def user_params
    { user: { params.require(:user).permit(:full_name, :email) } }
  end

但我想知道是否有一个选项可以设置为在我的所有控制器上默认获得该行为。

谢谢。

UPDATE 1(使用user_params

#users_controller.rb
def create
 if MyFancyFancyObject.call(user_params)
    redirect_to users_path, 
  else
    render action: "new"
   end
end

I'm wondering if there is an option I can set to get that behavior by default on all my controllers.

不,没有。您要做的根本不是 StrongParameters 的工作原理。一旦 params.require(:user),您将返回与该键关联的嵌套值集。

您唯一的选择是按照您的建议手动构建新哈希:

def user_params
  { user: { params.require(:user).permit(:full_name, :email) } }
end