ActionController参数需要哈希,而不是原始哈希

时间:2016-06-29 18:56:01

标签: ruby-on-rails ruby-on-rails-4

我对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用户传入哈希?

1 个答案:

答案 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 - 无法处理的实体

但不重要......