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

Unknow user · October 24, 2012 · Last by zgm replied at October 24, 2012 · 1846 hits

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``` 直接执行了,

You need to Sign in before reply, if you don't have an account, please Sign up first.