Rails模型:旧模式:表继承

时间:2011-09-30 21:42:55

标签: ruby-on-rails activerecord

我有一个遗留的SQL架构,如下所示:

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;

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

如何使用Rails 3.0模型和迁移对此关系进行编码? 例如,如果我跑了

rails g scaffold User userType:string seqNo:integer 

它会让我得到一个Rails数据库迁移,它会生成一个非常相似的模式,以及一个可以访问该表的模型。但是,我不知道如何将Employee表与Employee.id一起作为引用User.id的外键,以及获取可以访问这两个表的Employee模型。

我该如何做到这一点?

2 个答案:

答案 0 :(得分: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时不会更改数据库。

答案 1 :(得分:2)