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

标签 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 命令行验证我可以读取/写入数据库,因此这不是权限问题。

最佳答案

已解决:调用 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

关于ruby-on-rails - 反序列化的 Rails ActiveRecord 对象不会保存到 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48312459/

相关文章:

ruby-on-rails - Activerecord-PostgreSQL 适配器错误

ruby-on-rails - 有没有办法在 RSpec 中先运行嵌套的前置过滤器?

ruby-on-rails - Rails ActiveRecord has_many 通过不工作

ruby-on-rails - ruby rails - 重定向到原始请求 url

ruby-on-rails - rails : how to validate an object field's value before save?

ruby - 为 API 包装器实现类似 ActiveRecord 的关联

activerecord - DelayedJob中断可验证ActiveRecord中的唯一约束

mysql - 如何仅对付款总额为正的记录进行分组?

ruby-on-rails - 如何向 Rails 应用程序发送 json 请求

ruby - 导轨 : Duplicate key value violates unique constraint for Devise