所以目前我有一个Model类
class Book
# author_id
end
对于上面的Model类,我有一个简单的委托类
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
方法
发布于 2021-06-13 14:00:54
没有自动从JSON“反序列化”记录的方法。这是一个单向的过程。一个非常幼稚的解决方案是:
book = Book.new(JSON.parse(book))
但是,该记录的行为不同于已持久化并从数据库获取的记录,这可能会导致问题。还有一个问题是,您将记录的属性转换为JSON支持的原始类型。这方面的一个例子是JSON没有正确的decimal类型,这可能会导致舍入错误,并且关联不会被序列化/反序列化。
作为解决大多数问题的Rails has tons of caching mechanisms already,整个endavor看起来非常像一场徒劳无功的追逐。
https://stackoverflow.com/questions/67951397
复制