【问题标题】:Convert JSON back to ActiveRecord将 JSON 转换回 ActiveRecord
【发布时间】:2021-06-13 22:06:10
【问题描述】:

所以目前我有一个模型类

class Book
  # author_id
end

我有一个简单的委托类用于上面的模型类

class BookDecorator < SimpleDelegator
   attr_accessor :list_of_reviews
   
   def initialize
      super
      @list_of_reviews = []
   end
end

我在 Rails 控制台上测试过

-> book = Book.find(1)
-> book = BookDecorator(book)
-> book.list_of_reviews  
-> []

但是当我将对象序列化为 JSON 时

-> book = book.to_json
-> Deserialize back
-> book = JSON.parse(book)
-> book.list_of_reviews
-> NoMethodError: undefined method `list_of_reviews` for <String:0x00007>

如何将 JSON 反序列化回带有装饰器的 ActiveRecord?

之所以必须序列化为 JSON,是因为我必须将其存储在 Redis 中。

稍后反序列化以访问 list_of_reviews 方法

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

没有自动“反序列化”从 JSON 返回的记录的方法。它是一个单向过程。一个非常天真的解决方案是:

book = Book.new(JSON.parse(book))

但是,记录的行为不会像从数据库中持久保存和获取的记录那样,这可能会导致问题。还有一个问题是您将记录的属性转换为 JSON 支持的原始类型。一个例子是 JSON 没有正确的十进制类型,这会导致舍入错误,并且关联不会被序列化/反序列化。

这整个努力看起来很像Rails has tons of caching mechanisms already 的野鹅追逐,以解决大多数问题。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 2016-12-24
    • 1970-01-01
    • 2017-12-17
    • 2014-09-24
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多