首页 > 解决方案 > 在执行 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 未委托

我不知道该怎么办

标签: ruby-on-railsruby

解决方案


推荐阅读