使用StrongParameters将模型名称保存为根密钥

时间:2018-01-25 02:56:27

标签: ruby-on-rails strong-parameters

是否有办法让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

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

谢谢。

更新1(使用user_params

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

1 个答案:

答案 0 :(得分:1)

  

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

不,没有。你要做的不是StrongParameters的工作方式。只要params.require(:user),您就会返回与该键关联的嵌套值集。

您唯一的选择是手动构建新哈希,如您所示:

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