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:修复数据库中的数据:你破坏了它,你买了它。