我正在按照本教程在我的电子商务应用程序中制作购物车:https ://richonrails.com/articles/building-a-shopping-cart-in-ruby-on-rails任何事情都做得很好,但是当会话结束和客户没有完成时订单,这个订单和订单项目仍然保存在数据库中。我的想法是使用 before_destroy session 购物车的回调方法,但我不知道究竟是什么方法 destroy session 谁能帮我?
不幸的是,回调方法会很困难,因为您永远不知道会话何时结束,因为网站是无状态的。换句话说,你永远不会真正知道一个访客是闲着,还是他真的离开了。您通常获得的唯一标志是请求(GET/POST/PATCH/..)。
您可以做些什么来完成这项工作,即检查 last_updated 值,并在假设两个小时后删除所有未确认的购物车。或者,你甚至可以做一天,因为谁在乎呢?它在您的数据库中只有几个字节。
为了完成这项工作,您可以编写一个 rake 任务来查询和删除所有废弃的购物车。
就像是:
# cart model
class Cart
scope :unconfirmed { where(bought: false) }
scope :abandoned, { unconfirmed.where('last_update < ?', 1.day.ago}
end
# rake task
namespace :maintenance do
task delete_abandoned_carts: :environment do
Cart.abandoned.destroy_all
end
end
在此处了解有关 rake 任务的更多信息:https : //guides.rubyonrails.org/command_line.html#custom-rake-tasks
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句