刘华佼的全栈学习记录

5-13 new和build真的有区别吗?

| Comments

stackoverflow的在2011年的帖子Build vs new in Rails 3说了new和build的区别:

The only difference between some_firm.clients.new and some_firm.clients.build seems to be that build also adds the newly-created client to the clients collection:

就是说build把新增的client(在教材里是cart_item)添加到clients(教材中是cart_items)集合中去了,而new没有。我按照第一个答案的操作了下,发现结果与那个答案不同,new和build的效果一样的,都新增到集合中去了。

测试时,把some_firm改成some_cart,client改成cart_item,clients改成cart_items。

后来又看Quora在2016年的帖子:

What's the difference of using (dot) build vs (dot) new in rails 4 are there any specific use cases for either?

说其实new与build没有区别,build是new的别名。它们有区别,是在rails2.3+(这个2.3+没看懂)或更低版本上。

我把教材中5-3 Step 2: 购物车设计 Part 1:

+  def add_product_to_cart(product)
+    ci = cart_items.build
+    ci.product = product
+    ci.quantity = 1
+    ci.save
+  end

中的build改成new,再添加商品到购物车,没有报错,功能正常。

所以,应该是在rails 3及更早版本中,new和build是有文章最开始说的区别,后面新版本就没有区别了。(我们现在用的是rails 5.0)

Comments

comments powered by Disqus