我正在阅读使用Rails进行敏捷Web开发。他们使用了语法:
item = cart.line_items.build(product_id: product_id)
我的问题是:
上述声明究竟发生了什么?该程序的哪些部分被称为?我找不到详细的解释。
为什么要使用build然后保存而不是简单地创建?
答案 0 :(得分:2)
上面一行创建了一个与购物车相关联的新line_item,并使用product_id初始化。构建本质上是一个很好的DSL,它允许您利用已有的关系来创建新对象。它只是利用购物车中的has_many: :line_items
关系和标准的Object.new
这种方法的优势在于您可以免费获得与购物车的关联,而不是:
line_item = LineIten.new
line_item.cart = cart
line_item.product_id = product_id
答案 1 :(得分:1)
has_many :association_name
方法在模型定义中调用时会创建多个方法,其中一个方法是.association_name
方法,它使SQL查询选择该关联中的所有对象。
要了解有关此内容的更多信息,请转到您的终端,输入rails c
,然后您就可以开始了解其工作原理。
答案 2 :(得分:1)
检查文档,了解在定义has_many
关系时,有多少自动生成的方法被注入到对象中:
其中包括collection.build
。
1)这个方法只是一个帮助器,所以你只需要写一行,否则需要不止一个。
2)没有特殊原因,取决于上下文,有时你只想初始化对象而不是保存它。如果要在初始化后立即保存对象,请使用其他自动生成的方法 collection.create!