2010-05-16 203 views
2

我对Ruby世界很陌生,在定义模型之间的关联时存在一些不清楚的地方。问题是:协会在哪里保存?Ruby on Rails和数据库协会

例如,若设为i通过执行创建Customer模型:

generate model Customer name:string age:integer 

然后创建订单模型

generate model Order description:text quantity:integer 

,然后我设置以下述方式关联:

class Customer < ActiveRecord::Base 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :customer 
end 

我想这里是缺少的东西,例如两个实体之间的外键。它如何处理使用关键字“has_many”和“belongs_to”创建的关联?

感谢

回答

3

每当你生成您的订单,你可以这样做:

generate model Order description:text quantity:integer customer:references 

,它会自动创建在迁移你的外键。 rails约定是每行都有一个名为“id”的主键,外键是它所引用的表,后面跟着一个下划线,然后是id。因此,在这种情况下,订单表将具有一个名为“customer_id”的属性。

由于您已经生成了您的属性,因此您应该创建一个新的迁移脚本,将一个名为“customer_id”的整数列添加到您的订单表中。

不要想要修改现有的迁移。只需创建一个新的列添加列。

class add_customer_id_to_orders < ActiveRecord::Migration 
    def self.up 
    add_column :orders, :customer_id, :integer 
    end 

    def self.down 
    remove_column :orders, :customer_id 
    end 
end 

注意:如果你已经做了一些在你的数据库中创建的数据,这将导致一些空的外键,这你要修复,或直接删除,并创建新的数据。

1

你应该的(整数)列添加到您的订单表,被称为 'CUSTOMER_ID'。