Rails 4.1.14.2 => 4.2.7.1值在字符串字段上转换为字符串

时间:2016-09-05 19:03:12

标签: ruby-on-rails ruby-on-rails-4 activemodel

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)之间发生了更改。

1 个答案:

答案 0 :(得分:0)

有几种不同的方法来编组和解组ruby对象:JSONYAML或带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