如何“要求”参数不仅要存在,而且要成为 Rails 中带有字符串参数的哈希?
How to `require` parameters to not only to be present, but to be a Hash with String Parameters in Rails?
我在我们的控制器中有非常通用的代码来处理参数白名单和清理:
def create
@sign_in = SignIn.new(sign_in_params)
# ...
end
def sign_in_params
params.require(:user).permit(:email, :password)
end
但是,这会引发以下参数的异常:
{
"user": "foobar"
}
原因是 params[:user]
存在,但它不是 return 另一个哈希,而是一个字符串。
导致异常:NoMethodError: undefined method
permit' for "foorbar":String`。
如何确保 require
不仅需要参数存在,而且还要求它是哈希?
根据 strong_parameters 文档,多次调用这些方法是有效的。所以你可以这样做:
# create a strong-parameter for testing
params = ActionController::Parameters.new({user: {email: "some@email.com"}})
# make sure the key is present, raises ActionController::ParameterMissing otherwise
params.require(:user)
# make sure the structure is as expected and use the result
return params.permit(user: [:email])
我在我们的控制器中有非常通用的代码来处理参数白名单和清理:
def create
@sign_in = SignIn.new(sign_in_params)
# ...
end
def sign_in_params
params.require(:user).permit(:email, :password)
end
但是,这会引发以下参数的异常:
{
"user": "foobar"
}
原因是 params[:user]
存在,但它不是 return 另一个哈希,而是一个字符串。
导致异常:NoMethodError: undefined method
permit' for "foorbar":String`。
如何确保 require
不仅需要参数存在,而且还要求它是哈希?
根据 strong_parameters 文档,多次调用这些方法是有效的。所以你可以这样做:
# create a strong-parameter for testing
params = ActionController::Parameters.new({user: {email: "some@email.com"}})
# make sure the key is present, raises ActionController::ParameterMissing otherwise
params.require(:user)
# make sure the structure is as expected and use the result
return params.permit(user: [:email])