Как сохранить объект в Rails - PullRequest
2 голосов
/ 04 ноября 2011

Я реализую своего рода рубиновый онлайн-терминал (просто для практики).Я использую 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 Ответ

0 голосов
/ 07 ноября 2011

К сожалению, я не думаю, что есть способ сериализации привязки в большинстве реализаций Ruby. Если вы попытаетесь связать Marshal.dump, вы получите ошибку TypeError в MRI ( Marshal - встроенная библиотека для сериализации объектов в Ruby).

Могут быть и другие способы сделать то, что вы пытаетесь сделать. Однако, если вам необходимо сериализовать привязку, посмотрите на MagLev . Эта реализация разработана таким образом, что любой объект может быть сохранен.

...