Rails 4.1.14.2
my_model.my_string_attr = { a: 1 }
my_model.my_string_attr # returns { a: 1 } (as a hash)
Rails 4.2.7.1
my_model.my_string_attr = { a: 1 }
my_model.my_string_attr # returns "{ a: 1 }" (as a string)
my_string_attr
在数据库中的类型为string
。
如何使用Rails 4.2.7.1在my_model.my_string_attr上存储hash / openstruct值?
我在4.2.7.1更改日志中找不到此更改,它可能在某些版本(4.1.14.2,4.2.7.1)之间发生了更改。
答案 0 :(得分:0)
有几种不同的方法来编组和解组ruby对象:JSON
,YAML
或带Marshal
的二进制序列化:
Marshal示例:
2.2.5 :012 > hash = { a: 1 }
=> {:a=>1}
2.2.5 :013 > s = Marshal.dump(hash)
=> "\x04\b{\x06:\x06ai\x06"
2.2.5 :014 > Marshal.load(s)
=> {:a=>1}
对于其他aproaches,您可以检查http://www.skorks.com/2010/04/serializing-and-deserializing-objects-with-ruby/或其他资源。
您可能还想检查ActiveRecord的序列化API。您可以为属性指定编码器/解码器,请参阅http://api.rubyonrails.org/v4.2/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html。