0

我有一个 ruby​​ on rails 应用程序,我想检测用户在模型创建向导中移动到不同的域页面。我在向导的第一步将模型数据存储到数据库中,并在向导的第二步将模型数据存储到了数据库中。如果用户在第二步移动到不同的域页面,我想销毁它。

我已经找到了一种方法来挂钩 onbeforeload 事件以向用户显示警告。但我只想在用户移动到不同的域页面而不是第三步时警告它。如果用户想移动不同的域页面,那么我想销毁存储的数据。

这样做的最佳解决方案是什么?有没有办法检测用户想去哪里?

编辑:在第二步中,我想从用户上传文件(使用 jQuery File Uploader 的 ajax 上传)创建模型并与第一步的模型相关联。因此,如果我可以得到哪个 id 将分配给第一步的模型,那么我可以很容易地与之关联。这就是为什么我想在第一步中存储数据。

而且我不想在用户明确离开向导之前使未完善的模型过期。然后我可以检测用户是否仍在打开向导并且只是停止很长时间或已经离开向导页面?(我想像桌面应用程序一样构建应用程序,以便用户可以拥有未保存的文件,直到在多个浏览器窗口上明确离开向导)

4

2 回答 2

0

那是不可能的。一旦您的页面被卸载,您将无法执行任何其他操作。如果用户正在加载另一个域页面,则该域可以控制该页面,而不是您。

您应该做的是将向导页面的数据不存储在数据库中,而是存储在会话状态中,甚至存储在 cookie 中,这是一种很好的做法。然后,当用户到达向导的最后一步时,您从 cookie/session 中读取数据并立即写入 db。

于 2012-08-04T14:54:18.197 回答
0

您无法确定用户在onbeforeunload事件中的预期目的地或任何其他目的地。您也无法阻止用户加载另一个页面的请求,而是将他们重定向到某些destroy操作,然后再将其发送出去。

如果您满足于在用户完成向导时在每个步骤中将数据存储到数据库中,您可以考虑设置一个 cron 作业来运行您创建的 rake 任务,该任务可以通过并删除不完整的向导,这些向导早于一定年龄。

cron (或等效项)实际上是我会考虑做的事情,即使您可以检测到用户离开您的站点。

于 2012-08-04T15:03:13.783 回答