美文网首页ruby on rails
(4)商品编码查询功能

(4)商品编码查询功能

作者: suhuanzhen | 来源:发表于2016-11-28 00:53 被阅读0次

    切换到新的分支进行开发

    git checkout -b fourth/barcode
    

    构造数据

    rails g migration CreateProductBrands
    rails g migration CreateProductHistories
    rails g migration CreateTags
    

    执行迁移

    rake db:migrate
    

    填充数据

    products添加p8记录和填充SecondTagID


    image.png image.png

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


    image.png image.png

    product_second_tags填充TagID字段


    image.png

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

    添加路由

    image.png

    添加动作

    无论是在控制器还是视图中,查询语句里面含有#{}的解析符就可能导致sql注入
    #barcode_scanner_one是错误示例,会导致sql注入
    def barcode_scanner_one
    end
    

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

    我们应该用占位符?代替#{}的解析符,如下是正确案例
    def barcode_scanner_two
    end
    
    image.png image.png

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



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


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


    image.png

    修改模型关联为如下:


    场景实现

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

    image.png image.png

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

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


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


    image.png

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


    image.png image.png

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


    然后提交修改:

    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)商品编码查询功能

        本文链接:https://www.haomeiwen.com/subject/jzvnpttx.html