#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. Можете ли вы поделиться всей трассировкой стека?