我有同样的问题,但我不明白这个问题,需要一个不同的解决方案。
在我的密码控制器中(通过电子邮件启用密码重置),我的参数如下所示:
{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]", "password"=>{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]"}}
我想,“为什么我的参数在 password 内部重复”,没有意识到外部 password 来自资源名称。 (谢谢,7stud!)但是,如果我在控制器顶部添加wrap_parameters false 以使参数变平,那么我就不能使用“要求/允许”模式来处理强参数:
#passwords_controller.rb
...
private
def forgot_password_params
params.require(:password).permit(:email, :password, :code)
end
为了使这更清晰,我使用wrap_parameters 来重命名参数中的外部密码参考。代码:
#passwords_controller.rb
wrap_parameters "reset"
...
private
def forgot_password_params
params.require(:reset).permit(:email, :password, :code)
end
以及生成的参数:{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]", "reset"=>{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]"}}
然后我立即遇到了一个相关问题,在该问题中,我从表单中传入了newPassword,但它不在我的参数中。默认情况下,params 仅包含模型中的属性。 wrap_parameters 让我也解决这个问题:
#users_controller.rb
wrap_parameters :user, include: [:username, :email, :password, :newPassword]