首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails模型:传统架构:表继承

Rails模型:传统架构:表继承
EN

Stack Overflow用户
提问于 2011-10-01 05:42:55
回答 2查看 789关注 0票数 2

我有一个遗留的SQL模式,如下所示:

代码语言:javascript
复制
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模型和迁移来编码这种关系?例如,如果我运行

代码语言:javascript
复制
rails g scaffold User userType:string seqNo:integer 

它将为我带来一个Rails数据库迁移,它将生成一个非常相似的模式,以及一个可以访问该表的模型。但是,我不确定如何才能获得引用User.id的外键为Employee.id的Employee表,以及可以访问这两个表的Employee模型。

我如何才能做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-20 05:30:02

Rails有几个选项可以使用遗留数据库模式,例如,在定义迁移或关系时。

以下是一些建议:

http://www.slideshare.net/napcs/rails-and-legacy-databases-railsconf-2009

http://www.killswitchcollective.com/articles/45_legacy_data_migration_with_activerecord

http://sl33p3r.free.fr/tutorials/rails/legacy/legacy_databases.html

http://lindsaar.net/2007/11/26/connecting-active-record-to-a-legacy-database-with-stored-procedures

http://pragdave.blogs.pragprog.com/pragdave/2006/01/sharing_externa.html

ActiveRecord Join table for legacy Database

我也推荐"Pro Active Record“这本书。不确定是否有更新版本的Rails3。

票数 2
EN

Stack Overflow用户

发布于 2011-10-20 05:10:49

事实证明,在按如下方式运行脚手架之后:

代码语言:javascript
复制
rails g scaffold User userType:string seqNo:integer
rails g scaffold Employee id:integer  userType:string employeeNumber:string

然后,我必须编辑模型,使其看起来像这样:

代码语言:javascript
复制
class User < ActiveRecord::Base
   has_one :employee
end

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

唯一要做的另一件事是删除生成的迁移,以便在调用rake db:migrate时不会更改数据库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7616390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档