Rails 关于 Marshal.dump 失败 no _dump_data is defined for class Proc

sforce100 · 2013年02月05日 · 最后由 sforce100 回复于 2013年02月06日 · 3332 次阅读

我有一个 Product 的 model,把他序列化 Marshal.dump(Product.new) 是可以的, 但是 p = Product.new 由于 model 的验证,p.save => false。保存失败,然后我序列化这个 p,Marshal.dump(p) 就会报错 TypeError: no _dump_data is defined for class Proc

1.9.3p194 :032 > p = Product.new => # 1.9.3p194 :033 > Marshal.dump(p) => "\x04\bo:\fProduct\n:\x10@new_recordT:\x10@attributes{\vI\"\b_id\x06:\x06EFU:\x1AMoped::BSON::ObjectId\"\x11Q\x10\xD5\x8Fh\xE9\xF2\x15\x84\x00\x00\x06I\"\x15search_recommend\x06;\bFI\"\x00\x06;\bTI\"\x14questions_count\x06;\bFi\x00I\"\finsures\x06;\bF[\x00I\"\fpoperty\x06;\bFi\x06I\"\n_type\x06;\bFI\"\fProduct\x06;\bF:\x18@changed_attributes{\vI\"\b_id\x06;\bF0I\"\x15search_recommend\x06;\bF0I\"\x14questions_count\x06;\bF0I\"\finsures\x06;\bF0I\"\fpoperty\x06;\bF0I\"\n_type\x06;\bF0:\x14@pending_nested{\x00:\x17@pending_relations{\x00" 1.9.3p194 :034 > p.save => false 1.9.3p194 :035 > Marshal.dump(p) TypeError: no _dump_data is defined for class Proc

应该是有个属性包含了 Proc 对象,可以逐一迭代看看是哪个属性:

...
p.save
p.instance_variables.each do |v|
  content = p.instance_variable_get v
  puts "dumping @#{v} = #{content.inspect}"
  Marshal.dump v
end

dump 之前把有问题的属性设成 nil 就可以了

#1 楼 @luikore 是 errors 导致的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号