Rails中的强参数-Require子句被忽略

时间:2018-11-18 12:34:44

标签: ruby-on-rails controller routing strong-parameters

简而言之,正在向/games发出POST请求。

即使强大的params要求看起来像这样:

def game_params
  params.require(:game).permit(:name)
end

一个没有game对象的json请求,实际上只有一个name字段通过。

{
    "name": "Game of Life"
}

更奇怪的是,Rails记录器实际上是一个游戏对象!日志看起来像

Parameters: { "name" => "Game of life", "game" => {"name" => "Game of life"}}

暗示正在创建游戏对象。如果唯一的参数传递是 not name,则Rails会正确抛出400。

我阅读的所有文档都建议JSON中的game对象是绝对必须的,但在这里似乎被忽略了。

建议?

1 个答案:

答案 0 :(得分:1)

所以,这是任何需要了解此信息的人的更新。

经过一番挖掘,答案是-

如果您的require子句的对象名称与您的控制器名称匹配,Rails将使该对象成为可选对象。您可以在初始化程序中关闭此行为。

来源:https://api.rubyonrails.org/v5.2.1/classes/ActionController/ParamsWrapper.html