新手问题 Agile Web Development with Rails 第四版第九章疑惑

匿名 · 2012年10月24日 · 最后由 zgm 回复于 2012年10月24日 · 1845 次阅读

line_items_controller.rb文件中:

def create
  @cart = current_cart
  product = Product.find(params[:product_id])
  @line_item = @cart.line_items.build(:product => product)
  #......
end

对这个build方法不是很明白,书上是说这会构造一个新的在线商品关系,即@cart对象和 product 之间的关系。

我不大理解这样做的实际作用是什么,请问怎么更容易理解一点呢。。

谢谢哈!

@cart 一个购物车对象 @cart.line_items 购物车内的 line_item 集合 @cart.line_items.build 在购物车的 line_item 集合里面新建一个 item @cart.line_items.build(:product => product) 新建的这个 item 的参数是 :product => product

我理解是这样的: 本质上和LineItem.new是一样的,目的就是创建一个新的@line_item。 使用@cart.line_items.build(:product => product)的好处是会自动把新生成的@line_item@cart关联起来。

总的来说和下面的代码是一样的效果

def create
  @cart = current_cart
  product = Product.find(params[:product_id])
  @line_item = LineItem.new(:product => product)
  @cart.line_items << @line_item
  #......
end

@cart.line_items.build(:product => product) `` 不会马上执行sql,需要@cert.save @cart.line_items << @line_item``` 直接执行了,

需要 登录 后方可回复, 如果你还没有账号请 注册新账号