反序列化的Rails ActiveRecord对象不会保存到SQL数据库

时间:2018-01-18 01:18:23

标签: ruby-on-rails ruby activerecord serialization deserialization

问题:序列化和反序列化对象后,完全有效的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命令行验证我可以读/写数据库,因此它不是权限问题。

1 个答案:

答案 0 :(得分:0)

解决:致电var_name.dup.save

可能有用的中级调试步骤:

[6] pry(main)> fpt.valid?
=> true
[7] pry(main)> fpt.changed?
=> false
[8] pry(main)> fpt.save!
=> true
[9] pry(main)> FakeProductTest.count
=> 0
[11] pry(main)> fpt.errors.messages
=> {}

感谢@thorncp