相关思路、架构和代码仅供参考,请选修同一门课程并看到本仓库的同学注意规避学术不端风险,切勿进行任何形式的抄袭,作者对由此导致的后果概不负责。
实现了一个简易的B2C电子商务平台,支持商品发布、购买和相关交互动作。
本项目中建立了9个数据模型,即对应数据库中的9张表。模型之间存在关系12对。 Models列举如下:
addresses
:收货地址,包括收货人、电话、行政区域、详细地址、邮编等;cart_items
:购物车条目,包括商品和用户的索引、商品数目等;categories
:商品类别,包括类名属性,并可实现与商品之间的双向索引;comments
:对商品的评论,包括商品和用户的索引、评论内容等;items
:商品,包括名称、内容简介、单价、创建用户的索引、类别索引等;orders
:订单条目,包括商品和用户索引、收货地址索引、商品数目、买家备注、快递单号、订单状态等;users
:用户,包括电子邮件、用户名,密码,用户类别等。active_storage_attachments
和active_storage_blobs
:基于Active Storage服务建立的辅助模型,其中active_storage_blobs
储存文件索引,active_storage_attachments
完成文件与数据模型的关联,从而实现其它各数据模型的图片、文件等媒体上传、存储和项目中展示。本项目中主要用于商品图片的存储;
模型之间的关系图如下所示(采用了类UML图的样式,但不完全准确):
人永远是信息系统的核心,用户在本项目中的地位至关重要。在B2C on Rails电商平台中,管理员、商家和消费者统一于一个User模型之下,通过usertype
属性进行区分。
第三方Gem包Devise
用于用户注册和登录的认证管理,未登录的用户仅能浏览平台的首页。登录时用户需同时设置用户名和电子邮箱,但登录时仅使用电子邮箱作为凭证;用户还需要在注册时选定自己的身份(商家或消费者),注册后不得更改。
同时,项目引入了第三方Gem包CanCanCan
用于权限管理和控制。该Gem包使我们能够建立起“用户类型”到“Model#Action”的清晰映射,从而可以明确和规范不同用户角色在平台中的行为。
管理员是平台的管理者,他拥有除用户本身之外几乎所有数据模型的所有操作权限,包括对平台范围内所有商品、地址、类别、购物车、订单、评论等内容的增删改查,可以说“只要见得到,就能管得到”。同时,管理员也可以作为普通的卖家发布自己的商品。
本项目管理员的账号为:
- 电子邮箱: [email protected];
- 密码: ruby12345678
需要注意的是,因为代码中已设置只有使用 [email protected] 注册时,才可以选择“管理员”这个角色;而电子邮件又是具有唯一性的登陆凭证,因此管理员账号全平台只有一个。
消费者的行为与日常生活中我们大多数人上网购物的行为并无太大的差别。
- 查看由Admin和商家发布的商品并发表评论;
- 将商品添加到购物车,修改数量和删除;
- 添加和储存收货地址;
- 从购物车的商品中创建订单,并与商家互动进行后续操作或取消订单;
- ...
消费者示例账号:
- 电子邮箱: [email protected];
- 密码: ruby123456
商家在平台中主要负责发布商品和处理订单。
- 发布新的商品;
- 查看已发布的商品,仅能对自己发布的商品及其评论区进行修改和删除;
- 不能购买任何商品,但可以发表评论;
- 添加和储存收货地址;
- 查看自己发布的商品的订单,并与消费者互动进行后续操作;
- ...
商家示例账号:
- 电子邮箱: [email protected];
- 密码: ruby123456
下面是三种类型的用户对于各个主要数据模型的操作权限表。其中“Manage”代表Controller中全部的7种动作;Read仅代表 index 和 show。
User Type | Admin | Store | Consumer |
---|---|---|---|
Items | Manage all | Manage own Read others |
Read all |
Categories | Manage all | Read all | Read all |
Addresses | Manage all | Manage own | Manage own |
Comments | Manage all | Manage own and its items Read others |
Manage own Read others |
Cart Items | Manage all (Except New) |
None | Manage own |
Orders | Manage all | Edit its items | Manage own |
- 商品的名称、简介、单价、类别和封面图都是必填项;
- 每个商品在创建时都必须选择一个(且仅有一个)类别。但是,仅有Admin才能创建、修改和删除类别,商家和消费者都只有查看的权限;
-
用户和管理员仅能从购物车中发起订单,商家没有发起订单的权限
-
一笔订单仅能包含一种商品,但数量不限,这是因为订单将会定向发送至商品对应的卖家处;
-
一笔订单存在3种状态:待发货、待收货、已完成。状态之间的转换需要用户与商家配合互动完成。
- 用户创建订单后,订单为“待发货”状态,仅对用户本人和商品发布者对应的商家可见,此时用户可以随时修改除商品种类以外的信息;
- 商家看到订单后,需要补充订单的快递单号字段,之后选择发货,订单转入“待收货”状态;
- 此时,用户无法修改订单的任何信息,只能选择是否确认收货;商家则不能对订单进行任何操作;
- 用户确认收货后,订单状态变更为“已完成”。
- 在全过程中,用户可以随时删除订单,但是商家没有删除订单和修改任何订单关键信息(如数量、地址等)的权限。
-
尽管订单本身的可见范围有限,但是每种商品的累计订单数目是公开的,这可以使用户判断各个产品的销量;此外,评论区的开放也可以使用户知晓产品的口碑。