ruby-on-rails - 在执行 Marshal.load 时继续不被委派
问题描述
我的控制器上有一个功能
class BooksController < ApplicationController
before_action :fetch_books,
only: %i[index]
def index; end
private
def fetch_books
books = $redis.get("books")
if books.nil?
all_books = Book.all
@books = all_books.map { |book| BookDecorator.new(book) }
$redis.set('books', Marshal.dump(@books))
else
@books = Marshal.load(books)
end
end
end
我使用 Marshal 和 redis 做一个简单的缓存,我使用 Marshal 而不是 JSON 的原因是因为 Book 模型有一个委托类,我不想在反序列化时丢失这些信息。
class BookDecorator < SimpleDelegator
def calculate_something
end
end
但每当我试图反序列化对象时 -@books = Marshal.load(books)
我明白了
BooksController#index 中的 ArgumentError 未委托
我不知道该怎么办
解决方案
推荐阅读
- ios - 选择单元格时如何将collectionviewcell自动滚动到最近的单元格(上一个或下一个)
- python-3.x - 带有烧瓶和 UWSGI 的芹菜
- c# - InputSelect - 验证未按预期工作
- nativescript - 如何在 nativescript-pdf-view 中为每个页面留出边距
- oracle - pl/sql 中的循环条件返回值
- c# - .NET Core MVC 视图模型中的数据持久性
- php - 试图在同一索引页面上获取 AJAX POST JSON
- android - Android 启动画面拉伸
- python - 在 Python 中比较两个列表并创建一个组合的新列表
- usb - 当端点和 PMA 地址都更改时,CubeMX 生成的 USB HID 设备发送错误数据