如何在Rails中持久化对象

时间:2011-11-03 20:35:22

标签: ruby-on-rails ruby object-persistence

我正在实施一种红宝石在线终端(仅供练习)。我从一个简单的js web应用程序使用AJAX来调用一个方法来破坏“终端”的输入。为了避免环境问题并让用户创建自己的对象,我使用的是“绑定”对象。问题是我不知道如何坚持绑定。

我的第一个想法是创建一个bindindg,在用户每次访问应用程序时都会在帖子请求之间保持不变。在那一刻,使用唯一键和新绑定创建密钥对象对。然后将密钥传递给客户端。当用户发送字符串以通过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 :(得分:0)

不幸的是,我认为在大多数Ruby实现中都没有办法序列化绑定。如果你尝试使用Marshal.dump绑定,你会在MRI中得到一个TypeError(Marshal是用于在Ruby中序列化对象的内置库。)

可能还有更多其他方法可以做您正在尝试做的事情。但是,如果必须序列化绑定,请查看MagLev。该实现的设计使得任何对象都可以被持久化。