I have a table with one column that is of text type. There's a small string in it that should be serialized as an array
serialize :image_urls, Array
There are times when SQL is just faster for inserting data. When this is the case, I do the insert as a string
["image1.jpg", "image2.jpg"]
Since I'm inserting a string my Rails app crashes when it tries to read the data, with the following error message:
Attribute was supposed to be a Array, but was a String
Is there a way to not have this error thrown, or to catch it and convert the data?
I mean converting the string to an array is just a simple call, so, this should be easy. I just don't know where, or how to accomplish it.
From the fine manual:
serialize
(attr_name, class_name = Object)
[...] The serialization is done through YAML.
So the column should contain a YAMLized version of your image_urls
but '["image1.jpg", "image2.jpg"]'
is not a YAML array. If you want to muck around with the raw serialized data then you should use something like
["image1.jpg", "image2.jpg"].to_yaml
# ---------------------------^^^^^^^
to generate the string.
Or better, stop using serialize
altogether in favor of a separate table.
In Rails 4 it worked for me without any .to_yaml
, just added it to strong params as image_urls: []
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With