全栈工程师成长记

编程重新定义人生

破冰 8/11日记

Objective
完成:
1、JDstore购物车完善:可以修改商品数量、数量不能大于库存、同件商品再次加入只添加数量、清空购物车
2、JDstore订单完善:用户可以看到个人所有历史订单记录

Reflective
情绪:整体都非常不错
低点:帮同学排除一个购物车页面nil class的错,花了半天没找到原因,xdite老师过来讲解,还是听不懂-_-||。(后来助教通过db:drop搞定)

Interpretive
学到:RESTful基本概念和Rails网站运作流程。
领悟:这周的作业的数量和难度其实是有加强很多,大部分作业也没有解答,头三天基本只能做那些有解答的部分,所以整周作业的进度完成得很慢。原因在于老师要求完成的那些功能在如何具体实现的技术环节(比如要使用什么语法、该如何捞取特定的数据)上根本无从下手。
举个例子:有一个小作业要求在购物车里面增加商品数量的时候,该数量不能大于商品库存。
其实这个功能要求非常简单,编程无非就是把“人话”编成机器可以“读懂”的代码。进一步解读功能实现就是购物车商品数量小于商品库存时,可以按下“增加”按钮,否则就不能按下。因为两个数量之间就只有三种状态,前者小于、等于、大于后者。当设置为小于的时候可以加入,那么另外两种状态就被拦截了。
可是在代码的实现上就不知道从何下手了,我原本在view里面的写法是<% if cart_item.quantity < product.quantity %>,但是无法起作用。在设计哥的指导下,才发现自己的想法还不够清楚,导致代码也写不清楚。
cart_item.quantity这个数据是存在的,它指的是购物车里当前商品已经添加进来的数量;product.quantity这个数据也是存在的,它指的是某件商品的库存。问题在于,上面这段代码使得程序不知道它应该拿购物车“当前”这个商品的数量去跟“哪个”具体商品的库存做比较。
因此需要为product.quantity再指定一个cart_item参数,改成这样:
<% if cart_item.quantity < cart_item.product.quantity %>
这样,程序就知道应该拿购物车“当前”这个商品的数量去跟“当前”这个商品的库存做比较。
过了几道类似的坎之后,我开始意识到,先不管自己会不会具体的代码实现技术,要做的是把想要实现的功能转换成足够清晰的程序逻辑,只有清楚的知道你想干嘛、你想让程序执行什么动作,这样在写代码的时候才不至于无从下手,进而去查文档时也能知道应该要查什么。
另外一个很大的收获是重新了解了Rails的运作流程以及RESTful的基础,理清了view、helper、partial、controller、model、databse、routes等概念和相互之间关系,一下子就有了一种柳暗花明的感觉。之前在做rails101的时候虽然已经讲到了这些知识,但当时看完还是似懂非懂最后不懂,现在再去看rails101的课程,从每一个章节的标题就已经能大概知道要做什么,大概会需要什么过程,正所谓读书百遍,其义自现。

Decisional
形容:如果说进步像是破冰,那么今天就是砸出一大块冰块的一天。
努力:完善订单功能、部署JDstore到heroku。