Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 最佳实践:临时记录与许多关联_Jquery_Ruby On Rails_Ruby_Carrierwave - Fatal编程技术网

Jquery 最佳实践:临时记录与许多关联

Jquery 最佳实践:临时记录与许多关联,jquery,ruby-on-rails,ruby,carrierwave,Jquery,Ruby On Rails,Ruby,Carrierwave,我现在正在寻找解决当前问题的最佳方法:我有两种型号,产品和照片。照片通过许多图片与产品关联。 当用户创建新产品时,她还可以使用嵌套表单(carrierwave,jquery)添加照片,然后再将实际产品保存到数据库中。由于该产品还不存在,我正在寻找最好的方法将我的照片保存到具有正确关联的数据库中 我想到了几个方法: 1)当用户点击“新产品”时,我会立即将产品保存到数据库中,并使用正确的ID,然后在用户点击“取消”时再次将其删除。这样的话,我就不得不在验证过程中稍微乱一点,而是做一些客户端验证。 如

我现在正在寻找解决当前问题的最佳方法:我有两种型号,产品照片。照片通过许多图片与产品关联。 当用户创建新产品时,她还可以使用嵌套表单(carrierwave,jquery)添加照片,然后再将实际产品保存到数据库中。由于该产品还不存在,我正在寻找最好的方法将我的照片保存到具有正确关联的数据库中

我想到了几个方法:

1)当用户点击“新产品”时,我会立即将产品保存到数据库中,并使用正确的ID,然后在用户点击“取消”时再次将其删除。这样的话,我就不得不在验证过程中稍微乱一点,而是做一些客户端验证。 如果用户在创建产品时关闭浏览器窗口,则可能会出现问题-产品将保留在数据库中

2)我将它保存到数据库中,并以某种方式标记它,使用奇怪的ID或is\u temp字段或类似的东西。。这样,我可以在用户每次登录时清理数据库。“Cance”立即删除该内容(以及所有相关照片)

3)在内存中创建一个临时ID,但不要保存产品。我可以保存与此临时Id关联的照片,当用户点击“最终保存”时,我将产品Id更改为新的真实产品Id

到目前为止,对我来说,解决方案2看起来是最好、最干净的方法,这有点类似于Ryan Bates的Guest Record Railscast,但可能我遗漏了一些东西,还有一种更简单的方法。 我们高度赞赏任何其他解决方案

非常感谢你

使用#1,因为它更健壮。特别是,它对API更有效

这使您养成了构建模型的习惯,以便以独立的方式保存和修改模型。例如,用户可能真的想要一个没有照片的产品

我的真实世界应用程序正是这样设置的。当用户试图创建一个照片上传不正确的产品时,该产品仍然保存正确、验证正确等

此外,该应用程序还有一个API,其中包含创建产品的调用,然后是添加照片的另一个调用。API客户端能够独立于所有相关照片创建产品是非常有用的

避免使用#2,因为它会使产品滞留在数据库中。更糟糕的是,该产品尚未经过验证。这往往会给应用程序的其他区域(如报表)带来问题,除非您强制每个报表查询过滤掉滞留的记录


只有当您希望在事务中使用#3,并且/或者在这种情况下需要最快的速度时,才考虑使用#3。首先在内存中完成这一切有助于确保事务具有它所需的所有部分,并节省到数据库的时间。

我通常提供一个非常简单的表单,它只有几个非常特定的字段。例如,对于产品,您有一个项目名称和项目编号。我将使用一个弹出窗口(bootstrap或jqueryui对话框),它允许用户通过只提供商品编号和商品名称将商品添加到一个类别中,而无需离开该页面。然后,如果他们需要添加照片,他们会进入产品编辑表单,在那里他们可以做其他任何事情。就您的三个解决方案而言,我不喜欢选项2,因为它会在数据库中留下记录,这些记录可能在用户下次登录(可能是几个月甚至永远不会)之前都不需要。即使您在用户注销时这样做,你认为他们退出了什么?会话超时了吗?用户是否正在单击“注销”?我会选择1号或3号,更倾向于汉克斯,伙计,我确实选择了1号。我想用一个cron的rake任务来删除旧记录,类似于Ryan Bates的Railscast。但现在它工作得很好,每个人都很高兴:-)再次感谢!!嘿,很抱歉回复得太晚了,我在这段时间里忙得不可开交。非常感谢你的回答,我听从了你的建议,走了这条路。我甚至更进一步,只做了所有草稿,所以当用户想要创建产品时,它会立即在数据库中进行设置,直到她明确删除它。我甚至可能在用户编辑时添加一些ajax魔术来保存进度。到目前为止,对我来说似乎是非常可靠的,而且它与我的照片上传程序配合得非常好。:-)再次感谢!