为什么POST数据应该嵌套?

时间:2017-04-09 08:41:12

标签: ruby-on-rails json

我使用Rails作为API服务器,我想知道为什么要发送到服务器的数据需要嵌套。这似乎是定义params的首选方式:

def user_params
  params.require(:user).permit(:first_name, :last_name, :password, :username, :email)
end

这将是发送到创建路由的相应JSON:

{
    "user": {
        "username": "lorem",
        "first_name": "ipsum",
        "last_name": "dolor",
        "password": "sit",
        "email": "amet"
    }
}

为什么这是发布数据的首选方式?为什么JSON不能:

{
    "username": "lorem",
    "first_name": "ipsum",
    "last_name": "dolor",
    "password": "sit",
    "email": "amet"
}

1 个答案:

答案 0 :(得分:5)

这些不是在为您创建资源时发送的唯一参数,其他参数是:

  1. utf8,其值为
  2. authenticity_token随机字符串
  3. commit,其值为SaveUpdate
  4. 所以逻辑非常明显:Rails将所有用户归属参数分组到user密钥内,因此,它更容易阅读,更容易被代码解释,更容易白名单相关参数。

    不仅如此,有时您会尝试通过一个请求创建多个资源,例如用户有很多书籍,因此您希望创建一个用户,同时创建书籍 - 称为Nested Resources ,在这种情况下,它将是这样的:

    {
      "user": 
      {
        "username": "john_don",
        "books":
        {
          "0":
          {
            "author_id": 1
          }
        }
      }
    }
    

    我希望你明白这一点。