gpt4 book ai didi

ruby-on-rails - 使用 Rails 5 在 Postgres 中存储字符串化 JSON

转载 作者:行者123 更新时间:2023-11-29 13:50:08 25 4
gpt4 key购买 nike

我们正在将我们的应用程序从 Rails 4.2 升级到 Rails 5.0。

我们发现插入数据库时​​相同的请求会生成不同的 sql。数据库列是 JSON,看起来在 Rails 5.0 中它被存储为转义字符串。

有谁知道我们如何确保版本之间的行为相同?

请求参数:

参数:{"provider_package_item"=>{"provider_package_id"=>"2", "service_id"=>"6", "service_product_id"=>"17", "provider_price_list_id"=>"12", "provider_price_list_item_id"=> "122", "选项"=>"[{\"id\":95,\"title\":\"完成\",\"值\":{\"id\":\"130\",\"title\":\"Satin\",\"price\":0}},{\"id\":96,\"title\":\"纸张重量\",\"value\":{\"id\":\"135\",\"title\":\"200GSM\",\"price\":0}},{\"id\":112,\"title\":\"Delivery\",\"value\":{\"id\":\"189\",\"title\":\"Next Day\",\"price\":0}}]"}}

Rails 4.2 中的数据库查询:

插入“provider_package_items”(“provider_package_id”、“service_id”、“service_product_id”、“provider_price_list_id”、“provider_price_list_item_id”、“options”、“title”、“quantity”、“price”、“options_string”、“created_at”、 "updated_at") 值 ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) 返回 "id"[["provider_package_id", 2], ["service_id", 6] , ["service_product_id", 17], ["provider_price_list_id", 12], ["provider_price_list_item_id", 122], ["options", "[{\"id\":95,\"title\":\"完成\",\"value\":{\"id\":\"130\",\"title\":\"Satin\",\"price\":0}},{\"id\":96,\"title\":\"纸张重量\",\"value\":{\"id\":\"135\",\"title\":\"200GSM\",\"price\":0}},{\"id\":112,\"title\":\"Delivery\",\"value\":{\"id\":\"189\",\"title\":\"Next Day\",\"price\":0}}]"], ["title", "A4 Brochures"], ["quantity", 50], ["price", 65.0], ["options_string", "/Satin/200GSM/Next Day"], ["created_at", "2017-03-03 05:36:51.613297"], ["updated_at", "2017-03-03 05:36: 51.613297"]]

Rails 5.0 中的数据库查询

插入“provider_package_items”(“title”、“service_id”、“service_product_id”、“provider_price_list_id”、“provider_price_list_item_id”、“quantity”、“options”、“options_string”、“created_at”、“updated_at”、“provider_package_id”、 "价格") 值(value) ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) 返回 "id"[["title", "A4 Brochures"], ["service_id", 6], ["service_product_id", 17], ["provider_price_list_id", 12], ["provider_price_list_item_id", 122], ["quantity", 50], ["options", "\"[{\\"id\\":95,\\"标题\\":\\"完成\\",\\"值\\":{\\"id\\":\\"130\\",\\"title\\":\\"缎面\\",\\"price\\":0}},{\\"id\\":96,\\"title\\":\\"纸张重量\\",\\"value\\":{\\"id\\":\\"135\\",\\"title\\":\\"200GSM\\",\\"price\\":0}},{\\"id\\":112,\\"title\\":\\"Delivery\\",\\"value\\":{\\"id\\":\\"189\\",\\"title\\":\\"第二天\\",\\"price\\":0}}]\""], ["options_string", "/Satin/200GSM/Next Day"], ["created_at", 2017-03-03 05:30:02 UTC], ["updated_at", 2017-03-03 05:30:02 UTC], ["provider_package_id", 2 ], [“价格”,65.0]]

最佳答案

Rails 5 已更新为符合 RFC 7159。JSON 字符串,例如Javascript 中的 JSON.stringify() 现在保存为字符串而不是哈希/数组。要保持以前版本的 Rails 的行为,您需要在分配之前解析 JSON 字符串:

Model.payload = JSON.parse("{\"key\":\"value\"}")

或者您可以覆盖模型中的 setter 方法:
def payload=(value)
self[:payload] = value.is_a?(String) ? JSON.parse(value) : value
end

关于ruby-on-rails - 使用 Rails 5 在 Postgres 中存储字符串化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42572291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com