Rails:如何处理"属性应该是一个数组,但是一个字符串"错误?

baa*_*h05 10 arrays string serialization activerecord ruby-on-rails

我有一个表,其中一列是文本类型.其中有一个小字符串应该序列化为数组

serialize :image_urls, Array 
Run Code Online (Sandbox Code Playgroud)

有时SQL只是更快地插入数据.在这种情况下,我将插入作为字符串

["image1.jpg", "image2.jpg"]
Run Code Online (Sandbox Code Playgroud)

由于我正在插入一个字符串,我的Rails应用程序在尝试读取数据时崩溃,并显示以下错误消息:

Attribute was supposed to be a Array, but was a String
Run Code Online (Sandbox Code Playgroud)

有没有办法不抛出这个错误,或捕获它并转换数据?

我的意思是将字符串转换为数组只是一个简单的调用,所以,这应该很容易.我只是不知道在哪里或如何完成它.


我有点想覆盖object_from_yaml,但我不确定在哪里做这项工作.
我是在正确的轨道吗?

mu *_*ort 5

精细手册:

序列化(attr_name, class_name = Object)
[...]序列化是通过YAML完成的.

因此该列应包含您的YAMLized版本,image_urls'["image1.jpg", "image2.jpg"]'不是YAML数组.如果你想要使用原始序列化数据,那么你应该使用类似的东西

["image1.jpg", "image2.jpg"].to_yaml
# ---------------------------^^^^^^^
Run Code Online (Sandbox Code Playgroud)

生成字符串.

或者更好的是,serialize完全停止使用单独的表格.