Skip to content
This repository has been archived by the owner on Aug 28, 2023. It is now read-only.
/ Rails-Project Public archive

Project for the course "Ruby Language Program Design" (B3J063830).

Notifications You must be signed in to change notification settings

Sumsky21/Rails-Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

B2C on Rails

相关思路、架构和代码仅供参考,请选修同一门课程并看到本仓库的同学注意规避学术不端风险,切勿进行任何形式的抄袭,作者对由此导致的后果概不负责。

功能概述

实现了一个简易的B2C电子商务平台,支持商品发布、购买和相关交互动作。

Models及关系

本项目中建立了9个数据模型,即对应数据库中的9张表。模型之间存在关系12对。 Models列举如下:

  • addresses:收货地址,包括收货人、电话、行政区域、详细地址、邮编等;
  • cart_items:购物车条目,包括商品和用户的索引、商品数目等;
  • categories:商品类别,包括类名属性,并可实现与商品之间的双向索引;
  • comments:对商品的评论,包括商品和用户的索引、评论内容等;
  • items商品,包括名称、内容简介、单价、创建用户的索引、类别索引等;
  • orders:订单条目,包括商品和用户索引、收货地址索引、商品数目、买家备注、快递单号、订单状态等;
  • users用户,包括电子邮件、用户名,密码,用户类别等。
  • active_storage_attachmentsactive_storage_blobs:基于Active Storage服务建立的辅助模型,其中active_storage_blobs储存文件索引,active_storage_attachments完成文件与数据模型的关联,从而实现其它各数据模型的图片、文件等媒体上传、存储和项目中展示。本项目中主要用于商品图片的存储;

模型之间的关系图如下所示(采用了类UML图的样式,但不完全准确): sMbRgJ.png

用户类型与操作

人永远是信息系统的核心,用户在本项目中的地位至关重要。在B2C on Rails电商平台中,管理员、商家和消费者统一于一个User模型之下,通过usertype属性进行区分。

第三方Gem包Devise用于用户注册和登录的认证管理,未登录的用户仅能浏览平台的首页。登录时用户需同时设置用户名和电子邮箱,但登录时仅使用电子邮箱作为凭证;用户还需要在注册时选定自己的身份(商家或消费者),注册后不得更改。

同时,项目引入了第三方Gem包CanCanCan用于权限管理和控制。该Gem包使我们能够建立起“用户类型”到“Model#Action”的清晰映射,从而可以明确和规范不同用户角色在平台中的行为。

管理员(Admin, usertype == 0

管理员是平台的管理者,他拥有除用户本身之外几乎所有数据模型的所有操作权限,包括对平台范围内所有商品、地址、类别、购物车、订单、评论等内容的增删改查,可以说“只要见得到,就能管得到”。同时,管理员也可以作为普通的卖家发布自己的商品。

本项目管理员的账号为:

需要注意的是,因为代码中已设置只有使用 [email protected] 注册时,才可以选择“管理员”这个角色;而电子邮件又是具有唯一性的登陆凭证,因此管理员账号全平台只有一个。

消费者(Consumer, usertype == 1

消费者的行为与日常生活中我们大多数人上网购物的行为并无太大的差别。

  • 查看由Admin和商家发布的商品并发表评论;
  • 将商品添加到购物车,修改数量和删除;
  • 添加和储存收货地址;
  • 从购物车的商品中创建订单,并与商家互动进行后续操作或取消订单;
  • ...

消费者示例账号:

商家(Store, usertype == 2

商家在平台中主要负责发布商品和处理订单。

  • 发布新的商品;
  • 查看已发布的商品,仅能对自己发布的商品及其评论区进行修改和删除;
  • 不能购买任何商品,但可以发表评论;
  • 添加和储存收货地址;
  • 查看自己发布的商品的订单,并与消费者互动进行后续操作;
  • ...

商家示例账号:

权限控制

下面是三种类型的用户对于各个主要数据模型的操作权限表。其中“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种状态:待发货、待收货、已完成。状态之间的转换需要用户与商家配合互动完成。

    • 用户创建订单后,订单为“待发货”状态,仅对用户本人和商品发布者对应的商家可见,此时用户可以随时修改除商品种类以外的信息;
    • 商家看到订单后,需要补充订单的快递单号字段,之后选择发货,订单转入“待收货”状态;
    • 此时,用户无法修改订单的任何信息,只能选择是否确认收货;商家则不能对订单进行任何操作;
    • 用户确认收货后,订单状态变更为“已完成”。
    • 在全过程中,用户可以随时删除订单,但是商家没有删除订单和修改任何订单关键信息(如数量、地址等)的权限。
  • 尽管订单本身的可见范围有限,但是每种商品的累计订单数目是公开的,这可以使用户判断各个产品的销量;此外,评论区的开放也可以使用户知晓产品的口碑。

About

Project for the course "Ruby Language Program Design" (B3J063830).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published