0

我正在阅读使用 Rails 进行敏捷 Web 开发。他们使用了以下语法:

item = cart.line_items.build(product_id: product_id)

我的问题是:

  1. 上述声明中究竟发生了什么?程序的哪些部分被调用?我找不到详细的解释。

  2. 为什么使用构建然后保存而不是简单地创建?

4

3 回答 3

2

上面的行创建了一个与购物车关联的新 line_item,并使用 product_id 进行了初始化。Build 本质上是一个很好的 DSL,它允许您利用现有的关系来创建新对象。它只是利用has_many: :line_items购物车中的关系和标准 Object.new

这种方法的优点是您可以免费获得与购物车的关联,而不是执行以下操作:

line_item = LineIten.new
line_item.cart = cart
line_item.product_id = product_id
于 2013-09-12T15:50:56.387 回答
1

当在模型定义中调用该has_many :association_name方法时,会创建多个方法,其中之一是.association_name方法,它使 SQL 查询选择该关联中的所有对象。

要了解有关此的更多信息,请转到您的终端,输入rails c,然后您就可以开始尝试它是如何工作的了。

于 2013-09-12T15:48:10.887 回答
1

查看文档以查看在定义关系时将多少自动生成的方法注入到 Object 中:has_many

在所有这些中,它是collection.build.

1)这个方法只是一个助手,所以你只需要写一行,否则需要不止一个。

2) 不是特殊原因,取决于上下文,有时你只想初始化对象而不保存它。如果要在初始化后保存对象,请使用其他自动生成的方法 collection.create!

于 2013-09-12T15:56:48.880 回答