Продолжайте получать не делегированные полномочия при выполнении Маршала.загрузка

#ruby-on-rails #ruby

Вопрос:

У меня есть функция на моем контроллере

 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, потому что модель книги имеет класс делегатора, и я не хочу терять эту информацию при десериализации обратно.

 class BookDecorator < SimpleDelegator
   def calculate_something

   end
end
 

но всякий раз, когда я пытался десериализовать объект обратно — @books = Marshal.load(books)

Я получаю

ArgumentError в BooksController#индекс не делегирован

Я не знаю, что делать

Комментарии:

1. Вам действительно нужно изобретать колесо кэширования? guides.rubyonrails.org/…

2. Можете ли вы поделиться всей трассировкой стека?