rails 5.2 不正确的 json 应用程序记录序列化
rails 5.2 improper json serialization for application record
型号
class PushNotificationRequest < ApplicationRecord
serialize :details
移民
class CreateNotificationRequests < ActiveRecord::Migration[5.2]
def change
create_table :notification_requests do |t|
t.references :order, references: :spree_orders, index: false
t.string :key
t.json :details
t.string :type
t.timestamps
end
end
end
在控制台上创建数据
PushNotificationRequest.create(order: Spree::Order.last, details: {a: 2})
Mysql奇怪的存储
mysql> select * from notification_requests;
+----+----------+------+----------------+-------------------------+-----------+---------------------+---------------------+
| id | order_id | key | details | type | status | created_at | updated_at |
+----+----------+------+----------------+-------------------------+-----------+---------------------+---------------------+
| 7 | 19 | NULL | "---\n:a: 2\n" | PushNotificationRequest | INITIATED | 2019-01-09 13:45:40 | 2019-01-09 13:45:40 |
+----+----------+------+----------------+-------------------------+-----------+---------------------+---------------------+
details
列存储为一些奇怪的字符串而不是正确的 json
我正在使用 mysql 8.0.12 和 rails 5.12
有什么我遗漏的吗?
在这种情况下,我认为您需要定义将属性专门序列化为 JSON:
class PushNotificationRequest < ApplicationRecord
serialize :details, JSON
你确定MySQL可以顺便存储JSON吗? (我只对 PostgreSQL 有经验)
根据文档 Keep in mind that database adapters handle certain serialization tasks for you. For instance: json and jsonb types in PostgreSQL will be converted between JSON object/array syntax and Ruby Hash or Array objects transparently. There is no need to use serialize in this case.
serialize :details
不是必需的,并且在某种程度上破坏了序列化。删除后,在mysql.
中得到了正确的json
型号
class PushNotificationRequest < ApplicationRecord
serialize :details
移民
class CreateNotificationRequests < ActiveRecord::Migration[5.2]
def change
create_table :notification_requests do |t|
t.references :order, references: :spree_orders, index: false
t.string :key
t.json :details
t.string :type
t.timestamps
end
end
end
在控制台上创建数据
PushNotificationRequest.create(order: Spree::Order.last, details: {a: 2})
Mysql奇怪的存储
mysql> select * from notification_requests;
+----+----------+------+----------------+-------------------------+-----------+---------------------+---------------------+
| id | order_id | key | details | type | status | created_at | updated_at |
+----+----------+------+----------------+-------------------------+-----------+---------------------+---------------------+
| 7 | 19 | NULL | "---\n:a: 2\n" | PushNotificationRequest | INITIATED | 2019-01-09 13:45:40 | 2019-01-09 13:45:40 |
+----+----------+------+----------------+-------------------------+-----------+---------------------+---------------------+
details
列存储为一些奇怪的字符串而不是正确的 json
我正在使用 mysql 8.0.12 和 rails 5.12
有什么我遗漏的吗?
在这种情况下,我认为您需要定义将属性专门序列化为 JSON:
class PushNotificationRequest < ApplicationRecord
serialize :details, JSON
你确定MySQL可以顺便存储JSON吗? (我只对 PostgreSQL 有经验)
根据文档 Keep in mind that database adapters handle certain serialization tasks for you. For instance: json and jsonb types in PostgreSQL will be converted between JSON object/array syntax and Ruby Hash or Array objects transparently. There is no need to use serialize in this case.
serialize :details
不是必需的,并且在某种程度上破坏了序列化。删除后,在mysql.