在rails中使用'has_many'关系

时间:2013-09-12 15:35:33

标签: ruby-on-rails

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

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

我的问题是:

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

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

3 个答案:

答案 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!