尝试将 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
我正在使用 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