Ruby on rails 我可以在ActiveRecord中序列化什么对象?

Ruby on rails 我可以在ActiveRecord中序列化什么对象?,ruby-on-rails,ruby,activerecord,serialization,Ruby On Rails,Ruby,Activerecord,Serialization,我很高兴地使用serialize:my_array,array和serialize:my_hash,hash在数据库中方便地存储设置和数组 我可以用这种方式使用哪些其他对象?例如,我知道我可以使用Struct和OpenStruct,但是我怎么知道一个对象是否可以用ActiveRecord以这种方式序列化呢?例如,我如何知道我是否可以这样使用类Set(请注意,它应该被称为UniqArray)呢?此代码在Rails的serialize方法中确定序列化的编码器: if [:load, :dump].

我很高兴地使用
serialize:my_array,array
serialize:my_hash,hash
在数据库中方便地存储设置和数组


我可以用这种方式使用哪些其他对象?例如,我知道我可以使用
Struct
OpenStruct
,但是我怎么知道一个对象是否可以用ActiveRecord以这种方式序列化呢?例如,我如何知道我是否可以这样使用类
Set
(请注意,它应该被称为
UniqArray
)呢?

此代码在Rails的
serialize
方法中确定序列化的编码器:

 if [:load, :dump].all? { |x| class_name.respond_to?(x) }
   class_name
 else
   Coders::YAMLColumn.new(class_name)
 end
简而言之,这意味着:如果
对象本身具有
load
dump
方法,则可以序列化
对象。或者如果
YAML
可以
加载
转储
对象
。这样检查:

object == YAML.load(YAML.dump(object))  # with require 'yaml' in irb

此代码确定Rails
serialize
方法中序列化的编码器:

 if [:load, :dump].all? { |x| class_name.respond_to?(x) }
   class_name
 else
   Coders::YAMLColumn.new(class_name)
 end
简而言之,这意味着:如果
对象本身具有
load
dump
方法,则可以序列化
对象。或者如果
YAML
可以
加载
转储
对象
。这样检查:

object == YAML.load(YAML.dump(object))  # with require 'yaml' in irb

AR中的序列化使用Psych将实例转储到yaml字符串中

Psych知道如何序列化从Object继承的所有对象(Ruby中几乎所有的对象)

在一般情况下,Psych将对象的所有实例变量作为yaml字段转储

转储几个类也有一些特殊情况,例如
数组
日期
日期时间
异常
假类
浮点
整数
模块
零类
范围
理性
Regexp
String
Struct
Symbol
Time
TrueClass
,以及其他一些很少使用的


例如,如果我们有
类UniqArray
,实例
UniqArray.new([1,2,3])
,转储字符串将是
“--!ruby/object:UniqArray\nhash:\n1:true\n2:true\n3:true\n”
(其中
哈希
是实现Set存储的实例变量名)AR中的序列化使用Psych将实例转储到yaml字符串中

Psych知道如何序列化从Object继承的所有对象(Ruby中几乎所有的对象)

在一般情况下,Psych将对象的所有实例变量作为yaml字段转储

转储几个类也有一些特殊情况,例如
数组
日期
日期时间
异常
假类
浮点
整数
模块
零类
范围
理性
Regexp
String
Struct
Symbol
Time
TrueClass
,以及其他一些很少使用的

例如,如果我们有
类UniqArray
,实例
UniqArray.new([1,2,3])
,转储字符串将是
“--!ruby/object:UniqArray\nhash:\n1:true\n2:true\n3:true\n”
(其中
哈希
是实现Set存储的实例变量名)