【问题标题】:Rails: Keep changes to objects/associations in memory without saving to databaseRails:将对象/关联的更改保存在内存中而不保存到数据库
【发布时间】:2010-07-29 23:32:39
【问题描述】:

我有一个具有各种属性的 Rails 模型以及与其他模型的 has_many 关系。在视图中,我希望用户能够输入/更改值,这将更改加载对象中的值,并在他们进行更改时返回从它们计算的结果。但是,在他们选择“保存”之前,我不希望数据库中的值发生变化。我遇到的问题是我与集合关联的变量在每次新更改后都从数据库中提取。因此,如果我使用以下内容:

@model.attributes = params[:model]

它会持续对模型的特定调用的长度,但下次用户进行更改时,集合会重新加载,除了最近的更改之外,所有先前的更改都会丢失。我试过使用实例变量,例如:

@costs ||= self.costs

但是每当我对其运行操作时,它都会从数据库中重新加载,覆盖之前的更改。例如

@costs[i].monthly = 10

有什么方法可以确保更改在整个会话中持续存在而不保存到数据库中?现在看起来我最好的选择可能是创建一个单独的模型来存储值,然后在用户完成后将它们保存回原始模型。

【问题讨论】:

    标签: ruby-on-rails session attributes


    【解决方案1】:

    您可以在进行更改时将其重新保存到 params 散列,或尝试使用 session 散列(但您必须记得清除它)。

    http://guides.rubyonrails.org/security.html#what-are-sessions

    【讨论】:

      【解决方案2】:

      简而言之,数据不会在请求之间持续存在。当时我的印象是属性在会话长度上保持值。从那以后我了解到,唯一持久的东西是存储在数据库中的值以及在参数和会话哈希中来回传递的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多