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

Strong Parameters in Rails - Require clause is being disregarded

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

尽管强参数要求看起来像这样:

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 对象是绝对必须的,但在这里似乎被忽略了。

建议?

因此,为需要了解此信息的任何人更新。

经过大量挖掘,答案是-

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

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