Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:如何处理;属性应该是一个数组,但它是一个字符串";错误?_Ruby On Rails_Arrays_String_Activerecord_Serialization - Fatal编程技术网

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

Ruby on rails Rails:如何处理;属性应该是一个数组,但它是一个字符串";错误?,ruby-on-rails,arrays,string,activerecord,serialization,Ruby On Rails,Arrays,String,Activerecord,Serialization,我有一个表,其中一列为文本类型。 其中有一个小字符串,应该序列化为数组 serialize :image_urls, Array 有时SQL插入数据的速度更快。 在这种情况下,我将作为字符串进行插入 ["image1.jpg", "image2.jpg"] 由于我插入了一个字符串,我的Rails应用程序在尝试读取数据时崩溃,并显示以下错误消息: Attribute was supposed to be a Array, but was a String 有没有办法不抛出此错误,或者捕获它

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

serialize :image_urls, Array 
有时SQL插入数据的速度更快。 在这种情况下,我将作为字符串进行插入

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

Attribute was supposed to be a Array, but was a String
有没有办法不抛出此错误,或者捕获它并转换数据?

我的意思是,将字符串转换为数组只是一个简单的调用,因此,这应该很容易。我只是不知道在哪里,或者如何完成它。
我有点想从_yaml重写object_,但我不确定在哪里做这项工作。
我走对了吗

来自:

序列化
(属性名称,类名称=对象)

[…]序列化是通过YAML完成的

因此,该列应该包含您的
image\u URL的YAML版本
,但是
'[“image1.jpg”,“image2.jpg”]'
不是YAML数组。如果您想处理原始序列化数据,那么应该使用

["image1.jpg", "image2.jpg"].to_yaml
# ---------------------------^^^^^^^
生成字符串


或者更好的方法是,停止使用
serialize
而使用一个单独的表。

在Rails 4中,它在没有任何
的情况下对我有效。为了_yaml
,只需将它添加到强参数中,作为
image\u URL:[]
您可以这样尝试:{:serialized\u attribute\u name=>[]。不要忘了在适当的控制器中添加此参数作为强参数。当我遇到同样的问题时,它对我很有帮助。

为了获得一个“序列化”数组列,我发现它非常有用。将其添加到要作为数组的列的迁移中:

add_column:table,:column_name,:text,array:true,默认值:“{}”,使用:“(string_到_数组(column_name,,)”

这样,就不需要“序列化”列。它将是一个数组。

数据太复杂,无法正常化。。或者,这将是一个正确的痛苦,因为我必须有几十个非常小的表(这个例子有一个字段,但表中有很多字段),有没有办法覆盖抛出错误的函数?@dave:修复数据库中的数据:你破坏了它,你买了它。