Rails 5 期望的参数结构格式

Format of params structure expected by Rails 5

我正在开发仅 API 的 Rails 5 应用程序 -- 是的,我知道。我已经有一段时间没有出现在 Rails 附近了,所以当我遇到我完全忘记的良好的嵌套参数散列时,我正在做一些迟来的追赶。假设我想创建一个 User,我想我会使用以下参数发出一个 POST 请求(为简单起见,让我们将其设为 JSON):

{ "username": "myUsername", "password": "myPassword" }

然而,在悲伤和谷歌搜索之后,我 discovered/remembered 我应该通过以下内容:

{ "user": { "username": "myUsername", "password": "myPassword" } }

这反过来又使以下

def user_params
  params.request(:user).permit(:username, :password)
end

开心。

总而言之,我同意。这将是移动应用程序的私人 API,我不希望向任何人开放。然而,我一直在仔细阅读网络上的其他(通常是 restful-ish-like)API,其中 none 有嵌套的 model 业务正在进行。我很快就会为另一个项目开发 public API,所以我想知道是否有任何特殊原因需要该结构,如果没有,我如何在没有的情况下保持强大的参数所有的嵌套。

params[:user] 为用户引用所有参数通常很方便,并且没有与控制器、动作、格式等魔术参数冲突的风险。

您可以使用 parameter wrapping 让 API 客户轻松完成此操作

如果你添加

  wrap_parameters format: [:json]

然后对于您的控制器 JSON 请求 rails 会将与用户属性匹配的参数包装在哈希中(如果您的控制器未被调用 UsersController 您需要告诉要使用的动作控制器 class 或应该包装的参数)。这允许您的控制器代码保持不变,但 API 客户端使用 post "bare" 参数。

您也可以为整个应用程序全局启用此功能。