2011-09-30 78 views
2

我有一个传统的SQL模式看起来是这样的:Rails模型:传统模式:表继承

CREATE TABLE `User` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `userType` varchar(255) DEFAULT NULL, 
    `seqNo` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8; 

CREATE TABLE `Employee` (
    `userType` varchar(255) DEFAULT NULL, 
    `id` bigint(20) NOT NULL, 
    `employeeNumber` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `FKB65C8D4DB07F537D` (`id`), 
    CONSTRAINT `FKB65C8D4DB07F537D` FOREIGN KEY (`id`) REFERENCES `User` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

在这个设计中,员工是-一个域模型用户。即员工的“id”字段是引用User.id的外键。

我如何将这种关系与Rails 3.0模型和迁移编码? 例如,如果我跑

rails g scaffold User userType:string seqNo:integer 

它会得到我的Rails数据库迁移这将产生一个非常类似的模式,并可能访问表的典范。然而,我不知道该怎么做才能获得Employee.id作为引用User.id的外键的Employee表,以及获取可以访问这两个表的Employee模型。

我该如何做到这一点?

回答

2
+0

出色答卷一个较新的版本!特别是第三个。他发现了一大堆我不会想到的问题,但是需要,特别是在使用set_sequence_name时。 –

2

事实证明,运行支架后如下:

rails g scaffold User userType:string seqNo:integer 
rails g scaffold Employee id:integer userType:string employeeNumber:string 

我将不得不编辑模型看起来像这样:

class User < ActiveRecord::Base 
    has_one :employee 
end 

class Employee < ActiveRecord::Base 
    belongs_to :user, :foreign_key=>"id" 
end 

唯一的其他东西做的就是删除生成的迁移以便在调用rake db:migrate时不会更改数据库。