我有一个遗留的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;在此设计中,员工是域模型中的用户。例如,员工的"id“字段是引用User.id的外键。
我如何用Rails 3.0模型和迁移来编码这种关系?例如,如果我运行
rails g scaffold User userType:string seqNo:integer 它将为我带来一个Rails数据库迁移,它将生成一个非常相似的模式,以及一个可以访问该表的模型。但是,我不确定如何才能获得引用User.id的外键为Employee.id的Employee表,以及可以访问这两个表的Employee模型。
我如何才能做到这一点呢?
发布于 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。
发布于 2011-10-20 05:10:49
事实证明,在按如下方式运行脚手架之后:
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时不会更改数据库。
https://stackoverflow.com/questions/7616390
复制相似问题