`
ron
  • 浏览: 30726 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

让ROR的Migration自动加外键约束

阅读更多
Activerecord 挺方便的,但是就是不能自动加外键约束。突然记起来在《Agile Web Development with Rails》书中提到有一个plug-in可以解决这个问题。果然得到以下成果:

出处:
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 代码
  1. create_table :orders do |t|  
  2.   t.column :ordered_by_id:integer:null => false:references => :customers  
  3.   ...  
  4. end  

在运行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、详细的使用说明见上面提到的官方网站。
分享到:
评论
1 楼 dazuiba 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

相关推荐

    RoRRobot 使用ProgramR 和AIML 基于RoR的自动问答机器人

    使用ProgramR 和AIML 基于RoR的自动问答机器人。

    RoR性能优化经验谈

    RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...

    初探ROR

    Ruby on Rails的核心理念是“Don't Repeat Yourself”(DRY,不要重复自己)和“Convention Over Configuration”(约定优于配置),这些原则让开发者能够快速构建功能丰富的应用。 **一、Ruby语言基础** Ruby是一...

    神经网络ror resenet模型

    **神经网络Ror ResNet模型详解** 在深度学习领域,ResNet(残差网络)模型是具有里程碑意义的创新,由He et al.在2015年提出。该模型解决了深度神经网络训练中的梯度消失问题,允许构建非常深的网络结构。而“Ror”...

    ror中文资料

    **Ruby on Rails(简称RoR)中文资料** Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”...

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    RoR选题方向—源代码

    Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...

    ROR安装必备所有架包

    让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails的核心组件之一,它提供了控制器、路由和视图等功能。`actionpack-1.13.5.gem`是ActionPack的一个特定版本,包含了处理HTTP请求、执行控制器...

    ror实例

    Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...

    RoRBlog 基于RoR的博客系统

    基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。

    freemis 基于ror框架的mis

    3. **Scaffolding**:RoR提供快速原型开发工具,能自动生成基本的CRUD(创建、读取、更新、删除)操作的视图、控制器和模型代码,加速开发进程。 4. **Convention over Configuration**:RoR强调约定优于配置,减少...

    Windows 上搭建 ROR环境

    然而,在Windows环境下搭建Rails开发环境却让不少初学者感到头疼。本文将详细介绍如何在Windows系统上成功搭建Ruby on Rails开发环境,并分享一些个人经验,希望能对有意学习和使用Rails的朋友有所帮助。 #### 二、...

    ROR 文件的上传与下载

    ### ROR 文件的上传与下载:深入解析与实践 在Ruby on Rails(简称ROR)框架下,处理文件的上传与下载是一项常见的需求,尤其是在构建包含媒体内容的应用程序时。本文将基于给定的文件信息,详细阐述如何在Rails...

    ROR绿色最新环境(2013/3/10)

    ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...

    RoR中文解决方案(很不错哦)

    总的来说,这个压缩包提供了一套完整的解决方案,包括处理RoR中文问题的插件、数据库备份文件以及自动化代码生成工具,方便开发者在搭建或维护RoR应用时,特别是在涉及中文内容时,能够更顺畅地工作。对于学习和使用...

    ROR环境配置

    要让Eclipse支持ROR,你需要安装Eclipse的ROR插件,如"Rails IDE"或"Ruby and Rails Development Tools (RDT)"。这些插件可以通过Eclipse Marketplace来查找并安装。 安装插件后,需要配置Eclipse以识别你的ROR项目...

    javarebel 用JAVA和ROR一样方便测试

    破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar

    机遇ROR 的图书管理系统

    《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...

    RoR 培训课程PPT

    ### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...

Global site tag (gtag.js) - Google Analytics