我的 Rails 应用程序在一个页面上包含多个表单,这些表单都与同一个控制器(实际上是同一个关联)相关。我有一个提交按钮,它使用 jQuery 通过 AJAX 一次性提交所有表单。问题是只有一些更新实际上在数据库中显示为生效。它们都使用相同的逻辑和相同的方法,一次一个,数据保持良好。但是一次全部发送,实际上只有大约一半的数据保存在数据库中。
Javascript 看起来像这样:
$(document).on('click', '.submit', function(event){
$('form').submit();
});
这样就可以一键通过 AJAX 提交所有表单。(图约10个表格)
Rails 控制器看起来像这样(简化):
#prepare the JSON data
adapter = DataMapper.repository(:default).adapter
adapter.execute("UPDATE person SET facets=? WHERE id=?", JSON.generate(facets), id)
render :text => 'OK'
我认为问题可能涉及多个进程试图同时访问该方法并使用旧数据更新该字段的事实。我得到每个请求的响应“ok”,但只有大约一半的结果生效。
有什么建议么?谢谢!
编辑:
就像更新一样,以防万一有人遇到同样的问题。我通过将 async 设置为 false 来解决 jQuery 中的问题。这需要浏览器多一点时间来发送,并且可能会阻止其他 javascript 事件直到它完成,但没有一个请求会相互干扰。