Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 像其他对象一样将Mail::Message序列化到yaml_Ruby_Serialization_Yaml_Actionmailer - Fatal编程技术网

Ruby 像其他对象一样将Mail::Message序列化到yaml

Ruby 像其他对象一样将Mail::Message序列化到yaml,ruby,serialization,yaml,actionmailer,Ruby,Serialization,Yaml,Actionmailer,问题 普通对象序列化为以下内容: "--- !ruby/object {}\n\n" 而Mail::Message序列化为: "--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding:[…]" 问题 如何像其他对象一样序列化Mail::Message 背景 创业板版本: YAML:“0.60” 邮件:“2.2.19” 代码 Object.new.to_yaml #gives "--- !ruby/object

问题

普通对象序列化为以下内容:

"--- !ruby/object {}\n\n"
而Mail::Message序列化为:

"--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding:[…]"
问题

如何像其他对象一样序列化Mail::Message

背景

创业板版本:

  • YAML:“0.60”
  • 邮件:“2.2.19”
代码

Object.new.to_yaml #gives
"--- !ruby/object {}\n\n"

Mail::Message.new.to_yaml #gives
"--- \nMime-Version: \"1.0\"\nbody: \"\"\nContent-Transfer-Encoding: 7bit\nMessage-ID: <4dc418052be4a_16b62850c31ac91488@mbp.local.mail>\nsubject: \nContent-Type: text/plain\nDate: Fri, 06 May 2011 15:47:17 +0000\n"

因为Mail::Message有自己的
to_yaml
方法——我认为没有像这样的猴子补丁是不可能的

module Mail
  class Message
    def to_yaml
      self.class.name.to_yaml
    end
  end
end

irb(main):011:0> Mail::Message.new.to_yaml
=> "--- Mail::Message\n...\n"

原因是邮件宝石的补丁有缺陷。详情如下:


直接使用
YAML
,而不是通过
to_YAML
方法

YAML.dump(Mail::Message.new)
YAML.dump(Mail::Message.new)