尝试将 json 散列传递给 postgres json 列会导致空值

Trying to pass json hash to postgres json column results in null value

我正在使用 Rails API 服务器,我正在尝试将 JSON 对象传递给数据库,但它始终生成空值。

架构很简单:

create_table "notes", force: :cascade do |t|
  t.string   "title"
  t.string   "created_by"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.json     "clients"
end

这是我在 Postman 中发布的内容

{
    "created_by": "1",
    "title": "I'm another note",
    "clients": {
        "client1": {
            "name": "name 1",
            "role": "role 1"
        },
        "client 2": {
            "name": "name 2",
            "role": "role 2"
        }
    }
}

和这个returns

{
  "id": 14,
  "title": "I'm another note",
  "created_by": "1",
  "created_at": "2017-06-14T10:52:00.226Z",
  "updated_at": "2017-06-14T10:52:00.226Z",
  "clients": null
}

如果我将客户端 key/value 对作为 "clients": "some client" 发送,它将写入没有问题。我只是在 Postman 中传递了错误的数据还是其他原因?

必须调整您的强参数以预期并通过 json。

要允许接受带有任何键的 json,您可以将 note_params 设置为

def note_params
  params.require(:mote).permit(:title, :created_by).tap do |white_list|
    white_list[:clients] = params[:note][:clients].permit! if params[:note][:clients]
  end
end