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



简而言之,正在向/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"}}

暗示游戏对象正在被创建。如果唯一通过的参数是而不是name,Rails将正确地抛出一个400。

我读过的所有文档都表明JSON中的game对象是绝对必须的,但这里似乎忽略了它。

建议?

因此,对于任何需要了解这一点的人来说,这是一个更新。

经过一番挖掘,答案是——

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

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

最新更新