1、为什么要关联?
为什么我们需要在两个model之间建立关联?因为它让通用操作变得简单和容易。例如,考虑有一个rails应用程序包含一个customer model和一个order model。每一个customer有很多的order。没有关联时,model声明如下:

Ruby代码
  1. class Customer < ActiveRecord::Base
  2. end
  3. class Order < ActiveRecord::Base
  4. end

现在,假设我们想为一个已存在的客户添加一个新的订单,我们需要像这样做:

Ruby代码
  1. @order = Order.create(:order_date => Time.now, :customer_id => @customer.id)

再考虑在删除一个客户时,确保他的订单也被删除了。

Ruby代码
  1. @orders = Order.find_by_customer_id(@customer.id)
  2. @orders.each do |order|
  3.     order.destroy
  4. end
  5. @customer.destroy

使用Active Record关联,我们通过声明告诉Rails在这两个model之间存在的关联使这些及其他一些操作流线化,这里是建立customer model和order model的改进代码

Ruby代码
  1. class Customer < ActiveRecord::Base
  2.     has_many :orders, :dependent => :destroy
  3. end
  4. class Order < ActiveRecord::Base
  5.     belongs_to :customer
  6. end

有了这些改变,很容易实现为一个特定的客户创建一个订单

Ruby代码
  1. @order = @customer.orders.create(:order_date => Time.now)

删除一个客户和它的订单则更加容易

Ruby代码
  1. @customer.destroy