ruby-on-rails - 如何使用 strong_params 要求嵌套参数

标签 ruby-on-rails error-handling controller strong-parameters

我正在制作一个 Rails 应用程序,我想要一个 Controller 来优雅地处理格式不正确的请求。因此,理想情况下,参数哈希如下所示:

{"user" => { "username"=>"user1212" } }

但是如果有人发送看起来像这样的数据:
{"user" => "user1212" }

我希望能够引发描述性错误,最好是 ParameterMissing。现在,我的 user_params 方法如下所示:
def user_params
   params.require(:user).require(:username)
end

但如果 params.require(:user)返回一个字符串,如在第二个示例中,我得到一个 NoMethodError。我试过 params[:owner].require(:username)但这给出了一个类型错误。我已经尝试了一堆许可和要求的组合,但我还没有找到我喜欢的解决方案。有没有一种很好的、​​干净的方法来要求 params[:user] 是一个散列?

最佳答案

如果 key 不存在,则 require 返回参数或引发错误,因此要获得您想要的内容,我必须执行以下操作:

def user_params
   params.require(:user).require(:username)
   params.require(:user).permit(:username)
end

注意:顺序很重要,因为您希望返回完整参数,即您的用户参数,因此 permit 语句需要放在最后。如果您想要一些可选参数,例如电子邮件,您可以执行以下操作:
def user_params
   params.require(:user).require(:username)
   params.require(:user).permit(:username, :email)
end    

关于ruby-on-rails - 如何使用 strong_params 要求嵌套参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917946/

相关文章:

ruby-on-rails - 在Rails中手动设置updated_at

ruby-on-rails - 如何将独立的 Rack 应用程序安装到 Ruby On Rails 应用程序中?

ruby-on-rails - 如何显示两个对象的错误并且不保存,除非两者都有效

javascript - 如何处理前端的标准错误对象?

rest - 什么时候以及为什么我应该使用403错误代码?

python - 循环时Python ArcPy模块中的"raise e Execute Error"

ruby-on-rails - EmberJS、Rail 和第三方 OAuth2 登录

javascript - AngularJs:以编程方式按两列中的任意一列进行过滤

mysql - 尝试在 sails js 中发布 Recipe 帖子

Symfony2 重写 Controller