gpt4 book ai didi

mysql - Rails 在 TEXT 列上使用 3 个破折号为插入和更新添加前缀

转载 作者:行者123 更新时间:2023-11-29 23:17:21 25 4
gpt4 key购买 nike

我试图弄清楚为什么 Rails 4 在 MySQL TEXT 字段上的所有插入和更新都带有 --- 前缀。一切正常,但我只是好奇为什么会出现这种情况。

数据是一个简单的 JSON 字符串。没什么特别的。

这是更新数据库的 ruby​​ 代码:

data = {'branches' => [], 'tags' => []}
//
// Some code here to populate data['branches'] and data['tags']
//
component = Component.find(params[:id])
component.available_tags = data.to_json
component.save

puts data.to_json 产生以下输出:

{"branches":["develop","master","release-2014-12-15"],"tags":["release-2014-12-11","release-2014-12-10","release-2014-11-24.01","release-2014-11-24","release-2014-10-22","release-2014-10-09"]}

但由于某种原因,这会导致以下UPDATE查询:

UPDATE `components` SET `available_tags` = '--- \'{\"branches\":[\"develop\",\"master\",\"release-2014-12-15\"],\"tags\":[\"release-2014-12-11\",\"release-2014-12-10\",\"release-2014-11-24.01\",\"release-2014-11-24\",\"release-2014-10-22\",\"release-2014-10-09\"]}\'\n', `updated_at` = '2014-12-26 17:28:11' WHERE `components`.`id` = 10

我有另一个带有 TEXT 字段的表,它也得到 ---

表格如下所示:

mysql> desc components;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| component_name | varchar(255) | YES | | | |
| repo_url | varchar(255) | YES | | | |
| available_tags | text | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
| repo_type | varchar(255) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+

最佳答案

这是因为该对象使用 YAML 进行序列化在保存到数据库之前格式化。如果您只想存储纯文本,请使用:

component.available_tags = data.to_json.to_s

但是,如果您只想在该列中存储 JSON,您可以将其添加到您的模型中:

serialize :available_tags, JSON

这样,您的 :available_tags 列将自动序列化/反序列化,因此您无需运行 JSON.parsedata.to_json 以 JSON 对象的形式直接访问该字段。

例如:

component = Component.first
component.available_tags = data # no need to use to_json, will automatically be converted
component.save

还有

component = Component.first
json_object = component.available_tags # Will return a JSON object

关于mysql - Rails 在 TEXT 列上使用 3 个破折号为插入和更新添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660254/

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