(4)商品编码查询功能

切换到新的分支进行开发

git checkout -b fourth/barcode

构造数据

rails g migration CreateProductBrands
rails g migration CreateProductHistories
rails g migration CreateTags
(4)商品编码查询功能_第1张图片
(4)商品编码查询功能_第2张图片
(4)商品编码查询功能_第3张图片

执行迁移

rake db:migrate

填充数据

products添加p8记录和填充SecondTagID


(4)商品编码查询功能_第4张图片
image.png
(4)商品编码查询功能_第5张图片
image.png

product_infoes添加info8记录和填充ProductBrandID字段


(4)商品编码查询功能_第6张图片
image.png
(4)商品编码查询功能_第7张图片
image.png

product_second_tags填充TagID字段


(4)商品编码查询功能_第8张图片
image.png

添加模型文件,因为创建的表名符合默认约定,不写self.table_name也行

添加路由

(4)商品编码查询功能_第9张图片
image.png

添加动作

无论是在控制器还是视图中,查询语句里面含有#{}的解析符就可能导致sql注入
#barcode_scanner_one是错误示例,会导致sql注入
def barcode_scanner_one
end
(4)商品编码查询功能_第10张图片
(4)商品编码查询功能_第11张图片

这个示例虽然显示没有问题,但是存在漏洞,#{}的解析符出现在查询条件里面会导致sql注入。

我们应该用占位符?代替#{}的解析符,如下是正确案例
def barcode_scanner_two
end
(4)商品编码查询功能_第12张图片
image.png
(4)商品编码查询功能_第13张图片
image.png

因为我们需要通过{:product_second_tag=>[:tag]}访问到关联的数据,于是我们添加如下模型关联


(4)商品编码查询功能_第14张图片

同理我们还要添加一个模型关联


(4)商品编码查询功能_第15张图片

不过上面那样添加关联后面会导致如下的错误,这个是for nil class的另外一种情况。前面出现for nil class是因为没有关联的记录,而下面这种则是有关联的记录但是模型关联里面没有写关联或者写了关联关系但是没有写出foreign_key所以无法找到关联的数据


(4)商品编码查询功能_第16张图片
image.png

修改模型关联为如下:


(4)商品编码查询功能_第17张图片
(4)商品编码查询功能_第18张图片

场景实现

根据params传入商品编码(也可以是原生app二维码扫码,这里我们使用url携带参数模拟),一个编码对应一个商品就直接显示详细信息;一个编码对应多个商品就显示列表页,点击列表项来到该列表项对应的详细信息。

image.png
(4)商品编码查询功能_第19张图片
image.png

一个编码对应多个商品,结果是列表页,点击列表项来到详细信息页面

(4)商品编码查询功能_第20张图片
(4)商品编码查询功能_第21张图片

一个编码对应一个商品则直接显示详细信息页,可以看到路由url与点击列表项来到的详细信息页的url中携带ProductID不同
如下品牌和预售数量为空是因为info22关联的product_info记录不存在,而其他关联数据存在


(4)商品编码查询功能_第22张图片

查看控制台信息,可以看到sql语句没有出现n+1问题,说明完成任务合格


(4)商品编码查询功能_第23张图片
image.png

排序生效,如下我们反过来排序结果也反过来了


image.png
(4)商品编码查询功能_第24张图片
image.png

排序的写法还可以这么写,结果是一样生效的


(4)商品编码查询功能_第25张图片
(4)商品编码查询功能_第26张图片

然后提交修改:

git add .
git commit -m "商品编码查询"
git push -u https://github.com/xiaohuacc/active_record.git fourth/barcode
Counting objects: 26, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (23/23), done.
Writing objects: 100% (26/26), 5.67 KiB | 0 bytes/s, done.
Total 26 (delta 9), reused 0 (delta 0)
remote: Resolving deltas: 100% (9/9), completed with 8 local objects.
To https://github.com/xiaohuacc/active_record.git
 * [new branch]      fourth/barcode -> fourth/barcode
Branch fourth/barcode set up to track remote branch fourth/barcode from https://github.com/xiaohuacc/active_record.git.

合并到主分支

git checkout master
git merge fourth/barcode

你可能感兴趣的:((4)商品编码查询功能)