美文网首页
购物网 二刷第二周进度 5.7

购物网 二刷第二周进度 5.7

作者: RealAnalysis | 来源:发表于2019-06-15 17:40 被阅读0次

请设计一个功能,可以一键清空购物车内所有的物品

再次写对了routes, 开心~但是前端view以及controller的定义, 我就又乱来了...


不符合逻辑的部分是, 你都用carts_path这样"全体出动"的复数path, 后面根本不需要跟着"单个行动"才需配备的"指路locate"用的(@cart)呀!

教程用current_cart直接locate到此购物车, 不用像下面截图里我自己写的第一行那样去locate


嗯哼, 你想啊, 逻辑上来说也不能把cart删掉啊! 需求只是要删除"cart"里的"cart_items"们不是吗? 我那样写, 把用户的购物车都给端掉了...这也太狠了. 釜底抽薪式删除啊!

人家拿着购物篮, 想清空商品重新去挑选, 你却跑来把人家购物篮都给丢了...这绝对写错啊! 不但写错, 而且教程还嫌弃写一堆在controller太丑, 还去model定义了一部分...哼唧...

某样东西突然不想买了,我可以在购物车内删除它

真诚的困惑两者的区别...单数的cart以及cart_items他们区别何在啊...如果"购物车"用的path是carts_path这样的index专用复数...cart这个单数的到底要如何自处...跟cart_items又是何种关系?

而这个需求应该是锁定某个cart_item来操作对吧?


嗯, 对比教程发现果然有误, 而且method是直接写在 do 之前的位置...妈呀...

认真看代码能领悟到, 应该细化到 cart_item.product_id, 因为一个cart购物车里会有很多项的cart_item, 需通过product_id来进一步locate到需要删除的特定商品.

顺便去写了写controller


嗯, 果然写错, 打脸如下



这样跟教程对比,真是很多地方遗漏了啊...

神奇的是这句 @cart_item = @cart.cart_items.find_by(product_id: params[:id]) 明明是要定位"单数形式"的 cart_item, 为啥后边定义的部分@cart.cart_items.find_by(product_id: params[:id]) 里却用的是此cart里面全部的cart_items这个复数名词?!

难到是因为要在"众多的" cart_items里, 搜索定位到拥有 "目标product_id "的特定cart_item所对应的 params[:id]? 就是为locate到需要找的"商品相对应的cart_item"才这样写?! (感觉我应该推测的没错...我这厉害的领悟力哈哈哈)

这段代码在5月15日vedio里面有官方介绍, 7分钟开始!!!

已经加入购物车的物品,不能重复被加入

准备去product controller里面修改, 把add_to_cart设定的严格一些. 但心里在困惑, 如何在product的controller里关联到 cart里是否有此product了? 联系到外部去了, 莫非用"@"即可以召唤外部数据来帮忙判断咩?

被打脸...


不是我那样直接连cart是谁都不定义清晰就用, 教程是用 current_cart 而且要在末尾点名道姓是"@product" if !current_cart.products.include?(@product) 中间的products为啥是复数?!

估计也是之前我推测的理由, 要在"众多products"中一一过滤最后locate到"目标product" 所以不能是"单数product". 要排查的范围为"已存在的products们", 不是单独一个product, 所以用复数.

还有, 不是用 present? 是用 include? 这两区别是?

可以更改购物车内购买的数量( 原本预设数量都是1)

记得只要给view就成, 剩下的都是现成的?


打脸来了, 不止要改view而已...Orz

然后因为用到了"更新"还要submit数据变化, 所以要去controller增加定义...Orz 不信你就点击更新试看看, 报错也会告诉你的...

教程来打脸, 这里没有错太多~ 惊讶...


库存为 0 的货品不能购买

嗯, 又没思路了...

瞄教程才想起来, 可以直接在view里面"断其后路"...但是自己试写有点怪


教程来打脸



教程担心的还挺多, 总之就是允许没有"具体数量"的商品也能上架咯~

然后要去修改controller的部分...我完全没想法...而且再一次以为要去product controller 里去修改add_to_cart

其实不对...应该要去cart_item controller改, 思路是这controller里的update定义要保障"更新quantity"的时候符合情况.

  • 尝试解析一个难点

然后难点以及重点是这句代码 好好多看几遍 if @cart_item.product.quantity >= cart_item_params[:quantity].to_i 我自己写的话, 是会用"<="...看来没理解教程逻辑...

cart_item_params[:quantity]应该是购物车里面想要"更新"的商品数量. 所以前半部分的 @cart_item.product.quantity代表是库存的商品数量咯? 如果是这样理解才是对的, 那这句代码我能理解. 我一开始以为 @cart_item.product.quantity 代表的是购物车里的数量...难道不是吗?...Orz

莫非... if @cart_item.product.quantity >= cart_item_params[:quantity].to_i 想表达的意思是『"购物车里此商品目前的数量" 要大于或等于 "你想修改的商品数量"的数值』不对...应该还是 『"此商品目前的库存" 要大于或等于 "你想修改的此购物车里的商品数量"的数值』...好困惑...

你的困惑在5月15日vedio里面有官方解释, 7分钟开始!!! 你自己玩看看就知道了!!!

在购物车新增数量时,不能更新超过原有库存的数量

嗯, 改成1..cart_item.product.quantity就搞定了. 原来 cart_item.product.quantity还真就是"商品库存的数量"...回答了我前面的困惑...

而从这修改能看出来 cart_item.product.quantity是个数值, 那为什么上一条的cart_item_params[:quantity] 的date type居然不是"数值"? 改改看看效果.

.to_i去掉, 就报错了, 原来 cart_item_params[:quantity] 的date type是string啊...Orz 觉得奇怪, 去看了一下表格结构

明明一开始的设定就是个integer啊...去看了cart_item的表格结构, 也一样


看了一下汇总的表格信息, 一致啊


莫非我推测没错? 因params是个string来的, 它旗下被它带上的"特征"们也会改变"自身一开始的设定"全部变string?

相关文章

网友评论

      本文标题:购物网 二刷第二周进度 5.7

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