葡萄API参数畸形



我想做一个post端点,有多个嵌套的参数,但参数不像预期的

我为端点定义了以下参数:

params do
requires :p2 do
optional :p3
requires :p4, as: :p4_new
requires :p5, as: :p5_new do
requires :p6, as: :p6_new
end
end
end

所以我在端点的第一行放了一个调试器,我希望参数看起来像这样:

{
"p2": {
"p3": 1,
"p4_new": "Ceva nume",
"p5_new": {
"p6_new": 1,
}
}
}

但是实际的参数是畸形的,它以混乱的顺序给了我新命名的参数和参数的旧名称。这没有任何意义。有人知道这是怎么回事吗?

您可以看到paramsdeclared(params)之间的差异。关于重命名参数的文档规定,如果您只想要重命名的参数,则需要使用declared(params):

您可以使用as重命名参数,这在重构现有api时非常有用:

resource :users do
params do
requires :email_address, as: :email
requires :password
end
post do
User.create!(declared(params)) # User takes email and password
end
end

传递给as的值将成为调用declared(params)时的键

我假设你正在调用params,它会给你合并在一起的原始参数和重命名参数。切换到declared(params)只获得重命名的参数。