about 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 创建的数据是会长久保存并可随时调用的。添加商品到购物车,是用户的一个选择行为,只需要做一个记录,并不需要长期保存到数据库中。

← ORID记录5/11 [学习笔记] session & cookie是做什么用的? →
 
comments powered by Disqus