浏览 3377 次
锁定老帖子 主题:让ROR的Migration自动加外键约束
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-18
出处: http://www.redhillonrails.org/ 这是个很好的ROR插件网站,其中就有解决上面提到的问题的插件。 安装插件: 在项目目录下运行: ruby script/plugin install http://www.redhillonrails.org/svn/trunk/vendor/plugins/redhillonrails_core ruby script/plugin install http://www.redhillonrails.org/svn/trunk/vendor/plugins/foreign_key_migrations
ruby 代码
在运行ruby db:migrate后,检查schema.rb文件,就会发现add_foreign_key之类的语句,再检查数据库,果然有外键了。 说明: 1、关于数据库的支持,官方文档中提到:Using SQL-92 syntax and as such should be compatible with most databases that support foreign-key constraints. 2、用NETBEANS工具中用窗口创建plug-in不行,估计是NETBEANS 6 B1的一个bug吧。一定要用命令行安装插件,我就是在这个上面上当了,搞到现在才可以睡觉。 3、详细的使用说明见上面提到的官方网站。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-12
加fk constraint,会让你的数据维护很麻烦。
比如你一个tree model,一句delete是不能删除的。 除非将mysql置为 NOCHECK CONSTRAINT。 这在fixtures方式维护测试数据时,是相当恼火的。 我一般这样折衷: 所有非空fk,加上:null=>false 而外建引用非空是很常见的(几乎所有:belongs_to都要求外建非空),所以我修改了sex_migrate的foreign_key方法,让他默认加上非空约束 def foreign_key(*args) options = args.last.is_a?(Hash) ? args.pop : {} options[:null]=false unless options.has_key?(:null) args.each do |col| column(id = "#{col}_id", :integer, options) if options[:ref] reference = options[:ref] == true ? col.to_s.tableize : options[:ref].to_s (@fk_references ||= []) << [id, reference] end end end 使用时,默认就是非空,除非指定 create_table "topics", :force => true do |t| foreign_key "forum" foreign_key "root_post",:null => true end |
|
返回顶楼 | |