Ruby on rails开发从头来(五十六)- ActiveRecord基础(一对多关联关系)2011-12-04 博客园 Cure一对多关联可以使我们表示一组对象,例如,一个order可以包含有任意多个line item,在数据库中,所有的line item记录都通过外键关联到特定的order。在Active Record中,通过在父对象中的has_many来定义到子对象的关联,在子对象中使用belongs_to来指定父对象。我们已经在上一篇中了解了belongs_to声明,实际上,在一对多的情况下,和一对一是相同的,所以我们来了解has_many声明。

has_many声明has_many声明了一个属性,其行为就像一组子对象,可以把它看作数组来访问,查询特定的对象,或者添加新对象。例如:
order = Order.newparams[:products_to_buy].each do |prd_id, qty|product = Product.find(prd_id)order.line_items << LineItem.new(:product => product,:quantity => qty)end
追加操作符(>>)所作的不仅仅是向order的line_items列表中追加一个对象,并且和设置了line_item对象外键值为order对象主键值,而且在order对象保存的时候,会同时保存line_item对象。我们可以像对数组一样对has_many关联进行循环:
order = Order.find(123)total = 0.0order.line_items.each do |li|total += li.quantity * li.unit_priceend