我们正在将应用程序从Rails 4.2升级到Rails 5.0。
我们发现相同的请求在插入数据库时生成不同的sql。数据库列是JSON,看起来在Rails 5.0中它是作为转义字符串存储的。
有人知道我们如何确保不同版本之间的行为相同吗?
请求参数:
参数参数:{“供应商套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐套餐:0},{“id\”:96,“title\”:“Paper Weight\”,\“值\”:{“id\”:\“135\”,“标题\”:\“200GSM\”,“价格\”:0},{“id\”:112,“标题\”:\“交货”,“值\”:{“id\”:\“189\”,“标题\”:\“次日”,“价格\”: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],“服务识别号”,6号,“服务产品识别号”,17号,“供应商价格清单识别号”,12号,“供应商价格清单识别号”,122号,“供应商价格清单识别号”,12号,“供应商价格清单识别号”,12号,“供应商价格清单识别号”,122号,“选项”,“选项”中“[{“识别号”识别号:95,“[姓名姓名姓名姓名姓名姓名姓名”为“完成时间”,“价值”为“完成时间”,“价值”为“姓名姓名”为“身份识别号”,130,“姓名”为“缎面”为“缎面”,价格为“价格”识别号:0},{“身份识别号”识别号:96,“姓名”为“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”、“纸张重量”的价值”“id\”:“135\”,“title\”:“200GSM\”,“price\”:0}},{“id\”:112,\“title\”:“Delivery\”,“value\”:{“id\”:“189\”,“title\”:“Next Day\”,“price\”:0}}“],[“title”,“A4小册子”],[“quantity”,50],[“price”,65.0],[选项字符串],“/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”,“price”)中插入值($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12),返回“id”[“title”,“A4小册子”],“服务身份证”6、“服务身份证”6、“服务身份证”17、“提供者价格清单身份证”12、“提供者价格清单身份证”122、“提供者价格清单身份证”12、“提供者价格清单身份证”12、“提供者价格清单身份证”122、“数量”50、“数量”50、“选项”50“,”““[{“身份证”id\\”:95,“\\”姓名“\\”姓名姓名“\\”姓名“\\”姓名“\\”完成“,\\”姓名“\\”姓名“\\”姓名““服务身份证”6、“服务身份证”6,“服务身份证”6、“服务身份证”6,“服务身份证”17、“提供者价格清单身份证”12、“提供者价格清单身份证”12,“提供者价格清单身份证”12,“提供者价格清单身份证”12“,”姓名“,”50“:\\”纸张重量“,\\”值“:{\\”id“:\\”135“,\\“title\\““200GSM”200GSM“,\”价格“\\”:0},{“id”id“\\”:112,“\”title“\\”:““快递”快递“,\\”价值“:”id“\\”id“:\\”189“,\\”tit“,\\”第二天“,\”价格“:0}]]]]“,[”选项字符串“,”/Satin/200GSM/200GSM/次日“,[”创建地址”,2017-03-03-03-03-03-05:03-03-03-03 05:30:02 UTC“,”200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/200GSM/-03 05:30:02 UTC],“提供商软件包id”,2],“价格”,65.0]]

最佳答案

Rails 5已经更新,以符合RFC 7159的要求。Javascript中的JSON字符串,例如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

10-05 23:07