【问题标题】:Rails - How do I temporarily store a rails model instance?Rails - 如何临时存储 rails 模型实例?
【发布时间】:2011-08-13 02:43:09
【问题描述】:

我有一个 Rails 模型实例,需要在请求之间持久化而不保存到数据库中。

我正在开发的小型应用程序允许客户使用表单来编辑实例参数,将表单提交回服务器,然后查看其更改的预览。只有当按下 SAVE 按钮时,才能更新数据库中的实例数据。

我正在考虑将这些数据存储在会话中,但某些实例数据可能很重 - 例如长整页 html 字符串、BERT 序列化对象等

解决此问题的最佳方法是什么?如果有一个通用的方法,我会很高兴听到它。

更多详情

一般来说,在这种情况下,没有必要在请求之间持久化数据,因为表单数据会随着我们的请求而变化。

但是,在这种情况下,我们有一个 iframe,用于预览最近更新的数据。数据需要持久化.. 以某种方式.. 以便 iframe 可以从单独的服务器请求中获取它。

【问题讨论】:

    标签: ruby-on-rails session


    【解决方案1】:

    通常你不应该这样做:如果你想让你的应用程序更高效,那么考虑使用像 memcached/memcache-client 这样的存储来缓存相关数据。不要使用会话。

    在这种情况下,您甚至不需要存储数据,因为表单应该每次都将其全部传回?您可以使用表单中的数据让您的预览操作构建一个新对象,然后再次渲染表单。

    【讨论】:

    • 我刚刚用更多相关细节更新了这个问题。我一般同意你的观点,通常不需要持久性,但我们有一个独特的要求
    • 啊,对了——所以你在搞乱“无状态”范式,让用户对同一数据有两个同时视图?我实际上会继续将其保存到数据库中,以某种方式标记为“不完整”,然后以 cron 开始清理 rake 任务,该任务通过删除超过 24 小时的不完整记录或类似的东西。
    • 嘿,麦克斯。非常正确。这是一个很好的建议。希望有一种更清洁的方法来处理这个问题。我想我可能会切换 activerecord 会话存储,并将临时实例属性序列化为一个对象,然后将其推送到会话表中......
    【解决方案2】:

    要么将其存储在会话中,要么将所有值放在预览页面的隐藏字段中。使用 ActiveRecord 会话存储,它将会话数据序列化到数据库中的表中,而不是将其保存在内存中,或将其放入 cookie(由于 cookie 长度限制,这可能会彻底失败)。

    【讨论】:

    • ActiveRecord 存储可能是一个很好的解决方案。在这种情况下,隐藏字段将无济于事,因为 iframe 需要向服务器发出请求并检索临时保存的数据。
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2010-11-18
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多