Как сохранить объект в Rails
Я реализую своего рода рубиновый онлайн-терминал (просто для практики). Я использую AJAX из простого веб-приложения js для вызова метода, который уклоняется от ввода "терминала". Чтобы избежать проблем со средой и позволить пользователю создавать свои собственные объекты, я использовал объект "привязки". Проблема в том, что я не знаю, как сохранить привязки.
Моя первая идея состояла в том, чтобы создать привязку, которая сохраняется между запросами постов при каждом доступе пользователя к приложению. В этот момент создается пара ключ-объект с уникальным ключом и новой привязкой. Затем ключ передается клиенту. Когда пользователь отправляет строку для оценки через ajax, я отправляю ключ. Затем я могу получить объект привязки и обновить его.
Я попробовал что-то вроде:
class TerminalController
@@bindings = {}
def index
@token = keyToken
@@bindings[@token] = getBinding
end
private
def keyToken
Digest::MD5.hexdigest(Time.now.to_s)
end
def getBinding
# declare methods for all bindings
# ...
binding
end
end
Но во время выполнения код не может создать пару ключ-значение. На самом деле, все, что я пытаюсь выполнить после этой строки, терпит неудачу. Я не понимаю почему.
На самом деле, я думаю, что если я смогу сериализовать привязку, она будет работать, но я думаю, что она может быть неэффективной из-за задержек в сети и возможного роста привязки.
1 ответ
К сожалению, я не думаю, что есть способ сериализации привязки в большинстве реализаций Ruby. Если вы попытаетесь связать Marshal.dump, вы получите ошибку TypeError в MRI ( Marshal - встроенная библиотека для сериализации объектов в Ruby).
Могут быть и другие способы сделать то, что вы пытаетесь сделать. Однако, если вам нужно сериализовать привязку, взгляните на MagLev. Эта реализация разработана таким образом, что любой объект может быть сохранен.