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