如果不在会话中,如何/在何处临时存储ActiveRecord对象?

tac*_*ine 10 session refactoring activerecord ruby-on-rails

我正在重构一个基于Rails的事件注册应用程序,该应用程序的结帐过程会触及几个ActiveRecord模型.理想情况下,除非结帐完成(付款已成功处理),否则不应保存对象.我不完全确定为什么暂时将这些对象序列化到会话中会是一件坏事,但我已经一遍又一遍地读到它的坏兆头.至少不存在与现有记录不同步的风险,因为不会有任何现有记录.

我的问题是:

A)即使在其他地方不存在记录,在会话中存储记录仍然存在问题吗?即使我修改了模型,也不能杀死所有现有的会话?

B)如果它可能导致问题,我应该如何暂时存储对象?我应该保存它们并使用布尔标志来指示永久状态和临时状态吗?然后cron一个脚本来清除过时的临时对象?

思考?

Sim*_*tti 5

为什么不将它们存储在数据库中,但是你知道它们是"不完整"的?

例如,您可以添加added_to_cart_at日期时间字段.将产品添加到购物车时,您保存记录并设置该字段的值.然后,如果用户完成购买,则清除该字段并将产品与订单相关联.

要清除陈旧记录,您可以设置每日cron以删除所有added_to_cart_at早于1.day.ago的记录.