我对Ruby很新,但我已阅读了数十篇文章,最终没有解决这个问题的方法:
我正在尝试使我的API控制器具有防弹功能。为了验证请求,我正在使用ActionController::Parameters。
例如,在我的Users
API控制器中:
params.require(:user).permit(:email)
如果有人用{"user": "abc"}
调用它,则会导致错误,而HTTP 500则显然是用户没有将user
作为哈希传递的错误,并且应该导致HTTP 400 :
NoMethodError in API::UsersController#update
undefined method `permit' for "abc":String Did you mean? print
如何确保我的API用户传入哈希?
答案 0 :(得分:0)
你可以使用这种方法:dig(ruby 2.3):
重复检索与每个关键对象相对应的值对象。
http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
所以你可以说params.dig(:user,:email)
你也可以说params [:user] .has_key?(:email)但是第一个更好
另外在相关的说明中不确定你是否应该处理400 - 我认为422可能会更好,因为它是422 - 无法处理的实体
但不重要......