ruby-on-rails – 电子商务应用设计:如何在二手商品网站上管理购物车?

我正在使用 Ruby on Rails和PayPal API完成购买的二手商品电子商务市场.所以基本上这个交易是人们可以买卖他们的东西,比如eBay或Half.com.所有项目都被使用.这是我的问题:二手货物意味着每个商品都是独一无二的 – 至少在卖方通常只会携带1件已售出的商品的意义上.这给我的问题,对于以前遇到这种问题的任何开发人员来说,我应该如何处理以下情况:

卖家列出了他的运动衫
>#1将运动衫加入他的购物车
>#2人将相同的运动衫加入他的购物车
#1#通过PayPal签出

现在,我如何处理Person#2?显然,他不能看出同样的运动衫,因为卖家只有1件运动衫.我想知道的是我应该如何处理这种情况.到目前为止,我已经提出了两种可能的解决方案,但对我来说似乎也不令人满意. (顺便说一句,添加一个用户的当前购物车是会话变量可能是相关的)

选项#1:当人#1将运动衫添加到他的购物车时,您可以使用布尔型字段(例如available = false)来标记运动衫.这样做的缺点是用户可以将一个项目添加到他的购物车,然后闲置.因此,在人#1的购物车到期之前,没有人可以购买该商品.

选项#2:当我从PayPal获取IPN时,运动衫只被标记为不可用.这样做的缺点是,您理论上可以将PayPal中的#1和#2人员一次性检出,因此他们都会购买运动衫,直到获得IPN才知道我有出售产品两次.

StackOverflow认为什么?有没有人有这方面的经验可以提供一些洞察力?

解决方法

这是交易 –

卖家列出了他的运动衫
>#1将运动衫加入他的购物车
>#2人将相同的运动衫加入他的购物车
#1#通过PayPal签出
>防止他们两个最终购买同一个物品,其中有一个数量在你的库存.

在我看来,处理这种情况的一种方式是(哪种是您的选项#1的一种升级版)

当人1在其购物车中添加物品时,您将(如果不是,则应该)更改订单状态,即购物车,地址,付款,完成等.

所以当人物1将物品A添加到他们的购物车(状态:在购物车)中阻止他人10分钟(人2)将他们添加到他们的购物车.现在,您需要使用rone脚本或延迟作业在您的服务器上运行的crone作业检查每个产品,在这种情况下,订单表中的项目A在购物车状态为10或超过10分钟,并将这些产品从那行.这将使其他人(人员2)将该物品添加到他们的购物车.并有其他人(人2)和人1更新关于你的这个10分钟冲洗事情的过程有某种通知.例如:项目1将在运行到人员2的时间计数器中​​可用,并且项目1将在运行到人员1的计时器中进行.这个过程将使用户心中有一种紧迫感,您可以控制您的库存从没有出售的物品超过手数/数量.您可以查看本网站的实时和正在运行的实施 – http://www.thepeacockparade.com/

希望它给你一个公平的想法来处理这种情况.是的,如果你有更好的方式做同样的事情,请保持我更新,因为我也在寻找升级.

谢谢

性能更新

实施此过程后,您的网站可能会遇到一些性能问题.一种方法,我想出了一种保持应用程序运行的方式,为您的客户服务,同时同步的后台进程是,如果您使用亚马逊rds或任何其他云数据库服务,您可以完全拥有两个不同的应用程序服务器.一个用于您的客户服务,一个用于执行后台进程,如清理临时数据,文件,耙机任务,上传数据等.由于您的应用程序数据库完全不在应用程序服务器之外,因此可以从两个应用程序更新.因此,它将使您的主要应用程序为其用户提供更好的服务,而不是为后台进程使用的内存挨饿.

更新数据库设置

当涉及数据库,表和关联时,Rails非常棒.如果你是新来的亚马逊云数据库服务,那么在这里检查他们的计划:http://aws.amazon.com/rds/pricing.最好的部分是关于你的数据库在亚马逊rds是 –

>您可以自由选择近端点/服务器位置
为您的应用程序提供数据库,这将减少延迟
您的数据库查询和服务器负载处理它们.
>您可以使用多个应用程序来访问它.显然出于不同的目的,即一个用于上传数据,第二个用于运行分析等.
>你必须支付你所用的东西.
>如果有什么事情(有些时候是因为某些原因我更喜欢悲观主义者)出现错误,服务器因为任何奇怪的原因而崩溃.你没有拧!您的数据库是安全的只是设置一个新的应用程序瞧!你没有时间回来
>您可以自动进行数据库备份自动化,而无需将头插入BASH SCRIPTS.
>随着业务的发展,您可以扩展它.

要设置一个亚马逊rds数据库,请访问您的亚马逊rds控制台:https://console.aws.amazon.com/rds/home.从页面左侧的导航窗格中选择您的首选区域.点击“启动数据库实例”按钮,选择你喜欢的数据库并按照其余的流程,即选择实例类型等.

现在,如果你的rds实例运行,你可以看到一个这样的端点:database-name.random-string.region-endpoint.rds.amazonaws.com.在你的rails应用程序中编辑和更新你的config / database.yml到这个:

production:
  adapter: MysqL2
  host: database-name.random-string.region-endpoint.rds.amazonaws.com
  encoding: utf8
  reconnect: false
  database: databse-name
  username: master-username
  password: password

看起来很惊讶?对,就是那样!!您都设置为使用您的应用程序与您的新的亚马逊rds数据库实例.现在rake db:创建测试连接和rake db:migrate来创建你的表.

在这里,我想再增加一件事.如果你想让你的生活更美好,那么你也应该使用亚马逊s3(简单的存储服务).这是非常便宜和可靠的,请看这里:http://aws.amazon.com/s3/

请享用!!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...