【问题标题】:How frequently data should be saved if form is very large如果表单非常大,应该多久保存一次数据
【发布时间】:2017-08-24 12:56:37
【问题描述】:

我对使用 ajax 在数据库中保存数据有疑问。 (我可以做这部分)。我的问题是我有一个非常大的嵌套表单(我无法更改它)。输入字段的大型表单需要保存在大约 100 个字段中的数据中。新字段可能会打开,这取决于用户选择的选项。

例如,假设一个问题是您玩的是哪种游戏。在多选下拉菜单中,如果他选择了一场比赛,那么接下来的问题将是你玩这个游戏的频率。在哪一天哪一天等等。每个游戏可能有不同的问题。

现在我的问题是如何将这些数据保存在数据库中。我应该在用户单击提交后保存它还是应该在用户感觉数据之间保存它。这样他就可以刷新数据了。

我应该多久发送一次 Ajax 请求以保存数据以及如何从新字段中获取数据以及我应该如何将其保存在 Rails 中。 我知道 update.attributes

请帮助我或提出一些建议,我该怎么做。

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax ruby-on-rails-5


    【解决方案1】:

    如果您进行实时编辑或仅保存时,则主要是用户体验问题。

    但是,如果您经常保存(如自动保存)并且担心大小(100 个普通列可能无论如何都可以,尽管大文本或 blob 较少),那么您想要做的相当简单的只是保存字段实际上已经改变了。

    在 JavaScript 中有很多方法可以实现这一点。您可以在用户完成编辑时保存每个输入(例如,输入失去焦点),或者您可以根据计时器保存并跟踪自上次保存以来更改的字段。

    然后让您的 JavaScript 在其 AJAX 请求中包含这些字段(PATCH 可能是一个很好的使用方法)。然后,Rails 应该只尝试保存您更改的对象的属性(通过 ActiveRecord 上的update_attributessave)。如果您还想优化SELECT,请在类上使用updateupdate_all。例如结局如下:

    MyBigRecord.update(id, title: "My new title")
    

    您可以在这里轻松使用普通的强参数,其中仅包括实际存在于params 中的那些。

    MyBigRecord.update(id, params.require(:my_big_record).permit(:title, :author, :etc))
    

    如果你需要处理子对象,那么你可能需要一些特殊的处理,但想法是一样的)。一点点逻辑也可以按需执行初始 create,尽管您的 JavaScript 随后会收到 id 以用于将来的保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 2014-07-07
      • 2011-01-04
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      相关资源
      最近更新 更多