【发布时间】:2018-06-27 00:05:49
【问题描述】:
问题:对对象进行序列化和反序列化后,完全有效的 ActiveRecord 模型对象将无法保存到 SQL 数据库。
对象被序列化:
File.open(output_file, 'wb+') { |f| f.write(YAML.dump(objects_to_marshal)) }
然后反序列化
stuff = YAML.load(File.read(output_file))
即使我将它的主键 ID 和 created_at 和 updated_at 字段显式设置为 nil,该对象也不会保存。
[64] pry(main)> fpt = stuff[10][0]
=> #<FakeProductTest:0x0055ee2244a938
id: 1,
name: "test",
description: nil,
created_at: Fri, 29 Dec 2017 21:24:07 UTC +00:00,
updated_at: Thu, 18 Jan 2018 01:09:37 UTC +00:00>
[65] pry(main)> fpt.class.name
=> "FakeProductTest"
[66] pry(main)> FakeProductTest.count
=> 0
[67] pry(main)> fpt.save
=> true
[68] pry(main)> FakeProductTest.count
=> 0
[69] pry(main)>
我已经通过 MySQL 命令行验证我可以读/写数据库,所以这不是权限问题。
【问题讨论】:
-
保存后试试
FakeProductTest.reload,看看计数是否变化 -
[70] pry(main)> fpt.reload ActiveRecord::RecordNotFound: 找不到 'id'=1 的 FakeProductTest
-
做这样的事情对我有用。当我看到奇怪的行为时,我经常做的事情是
spring stop,值得一试。 -
我什至没有安装弹簧
-
这段代码是来自测试还是什么?
标签: ruby-on-rails ruby activerecord serialization deserialization