从著名的 agile web development with rails 书中摘录这段代码(最新版):
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(product: product)
这是针对一般电子商务/depot 应用程序的,此功能针对特定产品的“添加到购物车”按钮。这是我感到困惑的地方:
我想象的代码是:
@line_item = line_items.build(product: product)
@line_item = line_items.build(cart: @cart)
基本上,如果 line_item
同时属于产品和购物车,我会分别创建这些关系。
此外,如果购物车还没有任何 line_items
,那么我该怎么做 @cart.line_items
?我知道 line_items.build(product: product)
会返回给我一个 line_item
对象(我将其保存到 @line_item
中),但是如何如果购物车中还没有 line_items
,cart.line_items
是否有效?
最佳答案
在 Cart
模型中,很可能有一个 has_many
与名为 line_items
的 LineItem
模型关联。 Rails 会自动用一个空数组初始化该关联。
你可以认为 @cart
被初始化为:
@cart = Cart.new
@cart.line_items = []
每次添加调用@cart.line_items.build
时,都可以这样想:
new_line_item = LineItem.new cart: @cart
@cart.line_items.push new_line_item
注意:这绝对不是实际代码的工作方式,但您可以认为功能行为是相同的。
关于ruby-on-rails - 这个 rails 3 .build 方法到底在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11553824/