如何在Rails中实现基于会话的“添加到购物车”功能

问题描述:

您好我在我的rails电子商务应用中实现添加到购物车功能时遇到问题。这里我不是在谈论检出功能。只需“添加到购物车”。可以将项目添加到购物车,而无需用户登录其帐户。一旦用户完成添加到购物车,然后在退房之前用户将登录。我的问题是什么是最好的方式来存储添加到购物车的物品。我正在尝试使用会话。如果用户添加任何数量的产品,只需一个产品即可。但是如果用户检出多个数量不同的项目,如何临时存储这些信息。我需要一个数据结构来存储这些信息,但不知道要使用哪种数据结构。 我的意思是这样:如何在Rails中实现基于会话的“添加到购物车”功能

Session_id | product_id | quantity 
wisidiri4i | 1234  | 3  
349sksksks | 3452  | 6 

等等.....

使用散列我可以存储一个项目,但如何存储多个项目? 使用数据库表,我可以做到这一点,但如果用户离开项目添加到购物车,但没有退房如何从表中删除这些记录?

我被困在这里。 任何帮助,将不胜感激。 谢谢

通常,您应该使用会话ID和数据库来存储产品。这使会话信息最小化(只是ID)并为您提供最大的灵活性。 IMO认为将这样的数据结构放入会话存储区是个不错的主意:如果您以后决定更改数据结构会怎么样?您必须同时支持数据结构的旧版本和新版本。

正如您所指出的,基于数据库的解决方案的问题在于,您需要清除数据库中未购买的项目。这通常是定期进行的(例如清理X天以上的购物车),其中时间范围可以基于数据库的大小(如果购物车在3个月?6个月后清除,它的增长有多大)以及人们是否很可能在未来的某个时候返回(他们是否会在3个月后返回?6个月?)。

如果您决定存储在会话的信息,那么你可能需要做一些类型的简单序列,例如:

Session_id | Items 
892jsls098s | sku1:3,sku2:4,sku3:2 

这里唯一的限制是会话数据多长时间能(绝对增加一个长度检查)。