我有一个表格,其中一列是文本类型。 其中有一个小字符串应该序列化为数组
serialize :image_urls, Array
有时,SQL插入数据的速度更快。 在这种情况下,我将插入作为字符串
["image1.jpg", "image2.jpg"]
由于我在插入字符串时,我的Rails应用程序在尝试读取数据时崩溃,并显示以下错误消息:
Attribute was supposed to be a Array, but was a String
有没有办法不抛出这个错误,或者抓住它并转换数据?
我的意思是将字符串转换为数组只是一个简单的调用,因此,这应该很容易。我只是不知道在哪里或如何完成它。
<小时/> 我有点想覆盖object_from_yaml,但我不确定在哪里做这项工作。 我在正确的轨道上吗?
答案 0 :(得分:5)
来自fine manual:
<强>序列化强>
(attr_name, class_name = Object)
[...]序列化是通过YAML完成的。
因此,该列应包含image_urls
的YAMLized版本,但'["image1.jpg", "image2.jpg"]'
不是YAML数组。如果你想要使用原始序列化数据,那么你应该使用像
["image1.jpg", "image2.jpg"].to_yaml
# ---------------------------^^^^^^^
生成字符串。
或者更好的是,完全停止使用serialize
以支持单独的表格。
答案 1 :(得分:2)
在Rails 4中,它对我没有任何.to_yaml
的作用,只是将其添加到强{#1}}
答案 2 :(得分:0)
您可以尝试这样:{:serialized_attribute_name =&gt; []}。并且不要忘记将其作为强参数添加到适当的控制器中。当我遇到同样的问题时,它会帮助我。
答案 3 :(得分:0)
为了有一个“序列化”的数组列,我发现这非常有帮助。将此添加到您希望作为数组的列的迁移中:
add_column :table, :column_name, :text, array: true, default: '{}', using: "(string_to_array(column_name, ','))"
有了这个,您不需要“序列化”列。它将是一个数组。