`
苹果侠
  • 浏览: 11608 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Rails中的Migrations(二)

阅读更多

刨析Migrations:

 之前提到过,migrate其实就是rb代码, 因此每个migrate文件都包含一个rb class.这个class是ActiveRecord::Migration的子类,在这个类中至少应该包含两个类方法:up和down.up方法会执 行相应的更改数据库结构的方法,而down方法则会undo up中的改动.

增加字段:

当需要对某张表添加某个字段时,可以使用ActiveRecord::Migration中的add_column方法,典型的add_column方法如以下这些实例:
add_column :orders, :attn, :string, :limit => 100
add_column :orders, :order_type, :integer
add_column :orders, :ship_class, :string, :null => false, :default => 'priority'
add_column :orders, :amount, :decimal, :precision => 8, :scale => 2
add_column方法签名为:add_column (table_name, column_name, type, options = {})在最后参数options hash中可以使用以下key对column进行额外的定义:
:limit               =>          定义该字段的长度
:default          =>           定义该字段的默认值
:null               =>          该字段是否允许为空
:precision      =>           该字段的有效数字长度
:scale              =>           该字段小数点后的数字长度

改变字段名称:

如果需要对某张表的某个字段进行改名,可以使用rename_column方法.改方法的签名如下:rename_column (table_name, column_name, new_column_name),例子如下:
rename_column :orders, :e_mail, :customer_email 
将orders表中的e_mail字段改名为customer_email.
需要注意的是rename_column方法只会改变字段的名称,而不会修改该字段的依赖限制关系,例如主外键关系等.还有就是该方法并不是所有数据库都支持该方法.

改变字段类型和属性:
使用change_column方法可以改变指定字段的类型和相关属性,它的使用方法和签名与add_column方法类似,范例代码如下:
change_column :orders, :order_type, :string, 假设orders表中的order_type字段原本是integer类型,现在改为string类型.
需 要注意的是,在down方法中会将up方法中的改变undo回来,但是如果up中的改变是单向的,则undo时该字段的值就会丢失.例如,当 order_type由integer类型改成string后,可以插入类似"new", "existing"等内容.但是如果要执行down方法将该字段由string改回integer时,由于"new"等内容无法被转化为 integer,所以这些字段的内容就会丢失.
因此如果想建立一个单向的migration,则可以在down方法中直接throw一个Rails内部的exception,代码如下:

def self.down
  raise ActiveRecord::IrreversibleMigration
end
分享到:
评论

相关推荐

    mongoid_rails_migrations:Mongoid的数据迁移

    gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...

    mongoid_rails_migrations, Mongoid的数据迁移.zip

    mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid> = 4.0.0和 Rails> = 4.2.0.对于 Rails> = 3.2.0和 Mongoid> = 3.0.0,使用版本 1.0.0.

    Ruby on Rails中文指南

    在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 首先,让我们深入理解Rails的核心概念: 1. **路由(Routes)**:Rails的路由系统是应用程序的导航蓝图...

    nova-rails-migrations:提供命令以轻松访问Rails项目中的迁移

    适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...

    rails指南 中文版

    12. **Migrations**:Rails的迁移机制允许开发者通过Ruby代码来管理数据库结构的变化,使得数据库版本控制变得简单。 学习Rails指南中文版,开发者将全面了解Rails的各个方面,包括基础概念、核心组件、最佳实践...

    中文版rails教程

    2. **数据库迁移(Database Migrations)**:Rails使用ActiveRecord和SQLite、MySQL或PostgreSQL等数据库系统交互。开发者通过编写迁移文件来定义和修改数据库结构。 3. **路由(Routing)**:Rails的路由系统根据...

    Rails相关电子书汇总二

    标题 "Rails相关电子书汇总二" 提供的信息表明,这个压缩包包含的资源主要与Ruby on Rails框架有关,特别是关于RESTful(Representational State Transfer)架构风格在Rails上的实际应用。Rails是一个流行的开源Web...

    Rails3常用命令行命令

    此外,Rails的迁移(Migrations)系统允许你对数据库结构进行修改,如创建新表: ```bash rake db:create # 创建数据库 rake db:migrate # 应用迁移文件,生成对应的数据库表 ``` Rails的scaffold命令是一个强大的...

    Ruby on Rails入门例子

    - **数据库迁移(Database Migrations)**:Rails使用迁移来管理数据库结构的变化。通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **...

    component base rails applications

    - 探讨了组件化应用中的迁移(Migrations)管理,也就是如何在组件内处理数据表的迁移。 5. 组件类型: - 书中可能会提到不同类型的Rails引擎,比如Plain Engine、Full Engine和Mountable Engine,并解释它们之间...

    Ruby on Rails实例开发

    在Rails中,Ruby的元编程能力使得框架能够灵活地自定义和扩展。 Rails的核心理念是DRY(Don't Repeat Yourself),鼓励代码重用,避免重复编写相似的代码。此外,它还提供了大量的内置功能和库,如ActiveRecord用于...

    rails 项目起步示例

    在Rails项目中,我们首先需要了解的是项目的目录结构。一个标准的Rails应用会包含以下关键部分: 1. **app**:应用程序的核心,包括模型(models)、视图(views)和控制器(controllers)。模型负责业务逻辑和数据...

    rails向导打包

    4. **Rails 数据库迁移(Migrations)**: Migrations 是 Rails 中用于数据库结构版本控制的工具。它们允许开发者以编程方式添加、修改或删除表列,而不必直接操作 SQL。文件将涵盖创建、运行和回滚迁移,以及使用 `...

    web开发之rails最新调试通过购物车代码

    8. **版本控制**:描述中提到的"web开发敏捷之道-rails第二版"可能指的是随着Rails框架版本的更新,代码也进行了相应的适应。Rails版本更新可能会引入新的特性或改变旧的行为,因此代码调整是必要的。 9. **安全和...

    Ruby+for+Rails

    在Rails中,可以配置数据库连接信息,使用`database.yml`文件。安装MySQL后,通过Gemfile中的`gem 'mysql2'`来添加MySQL驱动,接着运行`bundle install`安装依赖。 4. **Rails基础知识** - **模型(Model)**:...

    RAILS2.1的中文版资料

    该文档详细介绍了Rails 2.1版本中引入的新特性和改进之处,对于Rails开发者来说,是一份非常有价值的参考资料。 #### 新特性介绍 **时间区(Timezones)** Rails 2.1增加了对时区的支持,这意味着应用程序可以更...

    Ruby on Rails入门经典代码

    本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习Rails的宝贵资源,帮助初学者快速掌握这个强大的框架。 1. **Rails基础知识**: - MVC架构:Rails的核心设计模式,模型负责数据处理,视图负责展示,控制器...

Global site tag (gtag.js) - Google Analytics