使用 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
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