over 1 year ago

这是 购物网站 第二周复盘笔记的疑问记录:关于 session 的疑问。

在实作 购物网站 5-4 Step 2 : 加入购物车代码 中出现这样一段代码:

app/controllers/application_controller.rb
  def find_cart
    cart = Cart.find_by(id: session[:cart_id])
    if cart.blank?
      cart = Cart.create
    end
    session[:cart_id] = cart.id
    return cart
  end

1. session 是做什么用的?

参考资料:

iHower老师提到:

HTTP是一種無狀態的通訊協定,為了能夠讓瀏覽器能夠在跨request之間記住資訊,因此基於瀏覽器的 Cookies,Rails 再提供了所謂的 Session 可以更方便的操作,用來記住登入的狀態、記住使用者購物車的內容等等。

还是好抽象,没能理解。。。

这篇文章借用 “买鸡排”的生活场景来解释 sessioncookie 的含义,非常形象易懂!

我去买鸡排,结账后老板给我一张号码牌,等到炸好后再用号码牌来领鸡排
在这里 session 就是那张号码牌,由那家鸡排店的老板发给你,记得这个鸡排是谁的


2. cookie 又是做什么用的?

刚刚的 session 是你每次去鸡排店,都会拿到新的一张号码牌
而 cookie 就是那间鸡排店发给你的一张会员卡,记录你的个人信息
既然会员卡放在使用者身上:
使用者可以自行丢掉(自行删除 cookie
到期自动失效( cookie 过期会不能使用 )
也就是说,我把一些不重要的信息,存在使用者的电脑中
下次使用者进来,我可以很快的知道他的喜好
它的储存空间为 4kb


3. 为什么要用 sessioncookie

我们要先知道 HTTP 是一个 无状态(stateless) 的 protocol
什么意思???
没有 session 服务器就不能识别谁正在使用我们的网站
为什么要用 cookie
使用者与服务器没有一直保持连线的状况,所以在客户操作的时候
可以将资料存在 cookie ,需要连线时在一起将资料送给服务器
可以想成,跟店家拿菜单,自己选好要吃什么后,再送给店家处理
就是服务器不想要记住所有人的个人化资讯,你提供给我即可


Rails 内如何操作 session ?

定义:session[:cart_id] = cart.id
读取:session[:cart_id]
删除:session[:cart_id] = nil
清空:reset_session

 
over 1 year ago

这是 购物网站 第二周复盘笔记的疑问记录:关于 ci & build 的疑问。

在实作 购物网站 5-3 Step 5 实做 add_product_to_cart 中出现这样一段代码:

app/models/cart.rb
def add_product_to_cart(product)
    ci = cart_items.build
    ci.product = product
    ci.quantity = 1
    ci.save
  end
end

1. ci 是什么?

这里的 ci 头一回碰到,根本不知道在说些什么。在 Google 之后搜到有个 CI server - CI(Continuous Integration)的条目,粗略扫了一眼感觉跟这个一点关系都没有,肯定不是在说这个。

又大致浏览了一遍这几行代码,发觉又有一种似曾相识的错觉!对!不是错觉!这和之前在 rails console 里的指令怎么这么类似呢?!?尝试将 ci 理解为 'cart items' 的缩写,然后整段代码就读的通了呢:

ci = cart_items.build :建立 cart item
ci.product = product : 生成 product
ci.quantity = 1 : 设置默认数量为 1
ci.save : 保存


2. build 又是什么?

代码大致已经弄明白了,但还有一个疑问: build 与 之前教材里的 new create 有什么不同?为什么不用 new create 呢?
Google 学长博客 帮我找到答案。

引用自学长博客:It's just an alias of new, nothing special.
build won't "create" a record in database, just create a new object in memory so that the view can take this object and display something, especially for a form.
The difference between build and create is that create also saves the created object as build only returns the newly created object (without it being saved yet).

build 只是 new的一种别名 ,都表示新建;它跟 create 的不同之处是, build 在数据库中不会有长久保存记录,但 create 创建的数据是会长久保存并可随时调用的。添加商品到购物车,是用户的一个选择行为,只需要做一个记录,并不需要长期保存到数据库中。

 
over 1 year ago
Ojective

今天没能完成昨天的计划,气温太高,上午出去办完事感觉都已经耗尽体力,下午又晒了一下午,真是够了。。。

Reflective

今天的高峰是:

和全栈无关,自己的私事材料准备齐全,下周抽空去递交材料
和全栈有关,看到自己的队友尽全力的样子感觉自己也有了动力,要更加努力才能配得上这样的信任嘛!

今天的低点是:

未完成昨天订的计划

Interpretive

跟着 xdite老师 的直播了解大赛的准备过程不是一个直线的过程,而是一步一步拆解任务的曲线过程:

  1. 做出教材网站
  2. 改动后端功能
  3. 改动前端设计
  4. 发布拉票

通过这样一步步拆解任务将大的目标拆分开来,一方面不会让人有“如临大敌”的特大焦虑感,另一方面也让一个项目的开发有了更为清晰的思路,有助于项目管理。

Decisional

  1. 今天未能完成昨天制定的任务,身心疲惫回到家里瘫倒在沙发上,今天真TM热
  2. 明天首要任务复习 User Story 内容,再开始写复盘笔记
  3. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

今天跟着解答完成 购物车实作 教材内容,并上传作业

Reflective

今天的高峰是:

跟着解答手打,很少出错,就算出错也能很快找到问题所在。

今天的低点是:

很久没在 Slack 上观察助教解bug了

Interpretive

完成了课程 购物车实作 内容:

  • 设计一个功能,可以一键清空购物车内所有的物品
  • 某样东西突然不想买了,我可以在购物车内删除它
  • 已经加入购物车的物品,不能重复被加入
  • 可以更改购物车内购买的数量( 原本预设数量都是1)
  • 库存为 0 的货品不能购买;在 View 里面不可以加入购车;在 Controller 里面不可以加入购物车
  • 在购物车新增数量时,不能更新超过原有库存的数量

本周的课程难度明显加大,太多不理解的内容,复盘笔记只写了一点点。

Decisional

  1. 今天基本完成昨天的计划任务,也比较顺利,但对于 User Story 部分的复习还没进行
  2. 明天首要任务复习 User Story 内容,再开始写复盘笔记,最后有时间的话把本周的课程视频补完,明晚似乎还有直播,可能时间上有些紧张
  3. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

今天花在 全栈营 的时间很少,晚上时间全都花在看锤子科技直播

Reflective

今天的高峰是:

得知周末只需要加半天班,周日下午可以meetup了!

今天的低点是:

低点在于本周的课程还没什么进展,User Story的概念还不太熟

Interpretive

完成了课程 5-4 实作 加入购物车 数量的功能

Decisional

  1. 这段时间花在全栈营学习的时间太少,导致进步缓慢,自己对于JDStore魔改大赛的想法还没着落,User Story的概念还不太熟悉,下午在微信群看到 Nic助教 有解答这方面的内容,找时间要复盘整理消化
  2. 明天上午完成工作上的事情以后开始赶进度,思考 User Story
  3. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

Job-Listing魔改大赛 落下帷幕,第一名果然是 千古刘传,大V的号召力真的是强,作品当然也是很棒的!获得第一名实至名归!
今天 JDStore 新一周的教材开始了,晚上跟着做了一点点,难度果然有所增加,购物车的实作有些不明白,先跟着教材做一遍再回过头来复盘吧!
晚上 Nic助教 直播讲述了之前一直困扰我的 RESTful 和 MVC架构的相关知识,还是没能全部吸收,明天抽空再看一遍视频梳理一下。

Reflective

今天的高峰是:

今天在翻看 魔改大赛 作品的时候,偶然间发现自己的作品被一位陌生的同学点赞了!有点小兴奋,这样完成度欠佳的作品在最后时刻还有人会投票,真的感谢!而且在 推荐作品 一栏中竟然还看到自己的作品,真是欣喜!这样的鼓励对我来说还是挺重要的!人都是喜欢被赞扬的嘛!加油!

今天的低点是:

上周meetup没能参加也就错失了组队的绝佳机会,本周的meetup可能又因为加班不能去参加,看着群里的小伙伴都各自找到了队友准备参赛主题,自己有些焦虑,但相信肯定是能找到队友的,这段时间需要整理思路构思作品主题。

Interpretive

  1. 在物品显示界面(app/views/products/show.html.erb)实作 购物车 按钮
  2. 在navbar栏 添加 购物车 选项,并添加cart 和 add_product_to_cart model,在 rails console 中成功添加 cart
Decisional

  1. 这段时间自己的学习时间没有控制好,情绪上有些懈怠,参赛作品该做的一些美化功能都没补上;下一阶段的时间需要把注意力放在 JDStore 的教材上,这部分的教材难度明显增大,未知的领域越来越多,跟不上进度后面再补的话会很累,要保证每天的学习时间,并要经常进行提取练习加深记忆
  2. 昨天翻看 Ruby-China 里,一期学员的 求职失败经历 帖子感触还是很深,xdite老师的这套教材可以让小白没有很大痛苦的入门,但要作为一名合格的程序员,要学习的东西还有很多很多,保持对编程的热情才能在后续困难中保持乐观继续前行,在最艰难的时刻,合理的“盲目乐观”也许是必要的吧!加油!
  3. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

今天把这周的课程作业做完上交,但是跟着解答一步一步做出,不是自己尝试解决。
这两天情绪上有些问题,工作上的事情很烦心,本就是一个比较悲观的一类人,掉进情绪陷阱很麻烦!

Reflective

今天的高峰是:

今天尝试 Nic助教 直播中提到的 workflow ,把 master 上传到github增加小绿点的技巧。

今天的低点是:

最近工作上的烦心事一直困扰着自己,静下心需要比较长的时间。

Interpretive

今天完成购物网站admin部分后台内容实作和前台页面的实作,跟着解答一步一步做学着理解怎样拆解任务实作小功能,之前不理解的地方也逐渐清晰了一点。

Decisional

  1. 明天逛逛论坛找点学习资料,尝试修改 购物网站 的一些页面
  2. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

今天回看了 Nic助教和 xdite老师 的直播视频,获得了一些正能量和有用的知识点。

Reflective

今天的高峰是:

今天主要忙着自己的私事,就上午回看了直播视频

今天的低点是:

新的教材学习进度缓慢,明天白天抓紧赶上!

Interpretive

今天回看直播视频懂得 Git 的一些小知识:fork与clone,虽然同是复制代码回本地,但fork后再clone的代码可以进行修改提交更新而直接clone过来的不可以;github上传master小技巧,切换分支实作功能确保没问题以后merge回master再推到git上能增加github的小绿点

Decisional

  1. 明天重振旗鼓开始 购物网站 的学习!
  2. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

今天学习时间不足,可能由于假期综合症的原因吧,不想工作,什么都不想干,这样的状态不是很好

Reflective

今天的高峰是:

今天没什么情绪高峰可言,假期综合症ing...

今天的低点是:

还处在假期状态中无法自拔...

Interpretive

今天只是完成了 购物网站 教材的前面一点点内容,提交相关作业

Decisional

  1. 这两天学习状态不是很好,明天开始需要尽快找回先前的状态
  2. 坚持每天进步一点点,践行“教就是学”
 
over 1 year ago
Ojective

假期几天在全栈学习上没有花多少时间,回老家陪陪家人休息休息,自己的魔改作品也没有修补内容;今天购物网站的教材又放出来了,感觉新的挑战又要来了!Fighting!

Reflective

今天的高峰是:

28晚回家的火车上写了篇文章《[学习笔记]一个月的时间,新手小白收获了些什么?》 今天早上稍微改来改发到论坛上分享,算是对于自己一个月来的一个总结,有一个小伙伴点赞,感觉还不错!

今天的低点是:

假期几天有点荒废,没怎么学全栈,感到一种罪恶感。。。

Interpretive

今晚看了Nic助教直播,但还是有些懵懂,等明天可以回看再好好看一遍

Decisional

  1. 明天开始新的教材学习,新的挑战又要开始了!
  2. 坚持每天进步一点点,践行“教就是学”