`
qw232144
  • 浏览: 35304 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ruby创建迁移

 
阅读更多

ruby在创建数据库前要创建迁移。下面就是创建迁移的方法。

迁移文件存储在 db/migrate 文件夹中,每个迁移保存在一个文件中。文件名采用 YYYYMMDDHHMMSS_create_products.rb 形式,即一个 UTC 时间戳后加以下划线分隔的迁移名。迁移的类名(驼峰式)要和文件名时间戳后面的部分匹配。例如,在 20080906120000_create_products.rb 文件中要定义 CreateProducts 类;在 20080906120001_add_details_to_products.rb 文件中要定义 AddDetailsToProducts 类。文件名中的时间戳决定要运行哪个迁移,以及按照什么顺序运行。从其他程序中复制迁移,或者自己生成迁移时,要注意运行的顺序。

自己计算时间戳不是件简单的事,所以 Active Record 提供了一个生成器:

$ rails generate migration AddPartNumberToProducts

 

这个命令生成一个空的迁移,但名字已经起好了:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
  end
end

 如果迁移的名字是“AddXXXToYYY”或者“RemoveXXXFromYYY”这种格式,而且后面跟着一个字段名和类型列表,那么迁移中会生成合适的 add_column  remove_column 语句。

 

 

 

$ rails generate migration AddPartNumberToProducts part_number:string

 

这个命令生成的迁移如下:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
  end
end

 如果想为新建的字段创建添加索引,可以这么做:

 

 

 

$ rails generate migration AddPartNumberToProducts part_number:string:index

 

这个命令生成的迁移如下:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_index :products, :part_number
  end
end

 类似地,还可以生成删除字段的迁移:

 

 

 

$ rails generate migration RemovePartNumberFromProducts part_number:string

 这个命令生成的迁移如下:

class RemovePartNumberFromProducts < ActiveRecord::Migration
  def change
    remove_column :products, :part_number, :string
  end
end

 迁移生成器不单只能创建一个字段,例如:

 

 

 

$ rails generate migration AddDetailsToProducts part_number:string price:decimal

生成的迁移如下:

class AddDetailsToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_column :products, :price, :decimal
  end
end

 如果迁移名是“CreateXXX”形式,后面跟着一串字段名和类型声明,迁移就会创建名为“XXX”的表,以及相应的字段。例如:

 

 

 

$ rails generate migration CreateProducts name:string part_number:string

 

生成的迁移如下:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.string :part_number
    end
  end
end

 

生成器生成的只是一些基础代码,你可以根据需要修改 db/migrate/YYYYMMDDHHMMSS_add_details_to_products.rb 文件,增删代码。

在生成器中还可把字段类型设为 references(还可使用 belongs_to)。例如:

 

$ rails generate migration AddUserRefToProducts user:references

 生成的迁移如下:

 

class AddUserRefToProducts < ActiveRecord::Migration
  def change
    add_reference :products, :user, index: true
  end
end

 

这个迁移会创建 user_id 字段,并建立索引。

如果迁移名中包含 JoinTable,生成器还会创建联合数据表:

 

$ rails g migration CreateJoinTableCustomerProduct customer product

 

 生成的迁移如下:

class CreateJoinTableCustomerProduct < ActiveRecord::Migration
  def change
    create_join_table :customers, :products do |t|
      # t.index [:customer_id, :product_id]
      # t.index [:product_id, :customer_id]
    end
  end
end

 

 

分享到:
评论

相关推荐

    Ruby-ferry一个数据迁移和可视化的命令行Rubygem

    Ruby Ferry 提供了一套完善的命令来创建、上载、下传、应用和回滚迁移,使得开发者可以方便地对数据库进行操作。 此外,Ruby Ferry 还强调了数据的可视化。这通常意味着它能以图形化的方式展示数据库的结构,帮助...

    Ruby-Shift一个帮助您在MySQL数据库中运行模式迁移

    在Ruby on Rails中,模式迁移通常通过创建`.rb`文件并在其中编写特定的迁移命令来完成。Ruby-Shift扩展了这一概念,为非Rails项目提供了类似的迁移功能,使那些不依赖于完整Rails环境的MySQL数据库应用也能受益。 ...

    ruby初始使用过程总结

    然后,运行`rake db:migrate`命令,它会执行这个迁移,从而在数据库中创建对应的表。 最后一步,"迁移数据库到mysql里面",实际上指的是运行数据库迁移,将数据库结构的变化应用到实际数据库中。在Ruby on Rails中...

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    通过这些资源,初学者可以在短时间内建立起对Ruby语言和Rails框架的基本理解,并逐步进阶到更复杂的开发任务。记得理论学习与实践相结合,不断编写代码和调试,是提升技能的最好方式。祝你在Ruby的世界里探索愉快!

    Ruby-TensorStream用Ruby重新实现TensorFlow

    Ruby-TensorStream的API设计尽力模仿TensorFlow,使用户可以轻松地从TensorFlow迁移过来。例如,它提供了类似的张量(Tensor)操作,包括创建、初始化、加法、乘法等。此外,它还支持构建计算图、会话管理和数据流...

    ruby学习的源码

    - 方法:Ruby中的方法可以定义在类、模块或对象上,支持块(block)和Proc对象。 - 控制结构:包括条件语句(如if、unless)、循环(如for、while、until、each)和流程控制(break、next、redo、retry)。 2. **...

    Ruby on Rails迁移时的一些注意事项

    在Ruby on Rails框架中,数据库迁移是开发过程中不可或缺的一部分,它允许开发者在不丢失数据的情况下对数据库结构进行修改。以下是一些在进行Ruby on Rails迁移时需要注意的关键点,以确保过程顺利且不会对现有数据...

    Ruby教程.chm和Ruby程序设计.doc

    这份文档可能包含创建控制器、模型、视图的步骤,以及路由、数据库迁移、ActiveRecord的使用等内容。 在学习Ruby的过程中,了解其面向对象特性至关重要。Ruby的所有事物都是对象,包括基本数据类型,这使得编程更加...

    Ruby-RubyLXC是liblxc的一个Ruby绑定它能够让你利用Ruby脚本创建和管理Linux容器

    6. 容器迁移:虽然Ruby-LXC并不直接支持容器的迁移,但它可以与其他工具结合,如使用`lxd`或`criu`来帮助完成容器在不同主机间的迁移。 7. 安全性:Ruby-LXC遵循liblxc的安全模型,确保容器之间的隔离性和安全性。...

    Ruby+for+Rails

    Rails提供了一系列的命令行工具,如`generate`命令,可以快速创建模型、控制器、迁移等。例如,`rails generate model Book title:string author:string`将创建一个`Book`模型,包含`title`和`author`属性。 6. **...

    Ruby on Rails 手順

    以上就是建立并使用Ruby on Rails开发环境的基本步骤。Ruby on Rails以其简洁的代码风格和高效的开发流程,吸引了大量开发者。通过RubyMine这样的IDE,开发者可以更高效地管理项目,提升开发效率。不断学习和实践,...

    Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移

    本项目“Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移”旨在提供一个直观的用户界面,以便开发者能够更加方便地管理和操作Rails应用中的数据模型、关系和数据库迁移。 在Rails中,数据模型(Model)...

    ruby on rails入门基础

    - 通过创建迁移文件来改变数据库结构,`rails generate migration`命令用于生成迁移,然后在迁移文件中添加数据库操作,最后运行`rake db:migrate`执行迁移。 10. **Scaffolding**: - Rails的scaffolding功能...

    RUBY完全自学手册

    - **Rails CLI**:Rails提供了命令行工具,方便进行项目创建、生成器使用以及数据库迁移等操作。 #### Sinatra Sinatra是一种轻量级的Web应用框架,相较于Rails而言更为简单灵活。Sinatra适合构建小型Web应用或API...

    用ruby读excel文件生成xml文件

    Ruby库如`roo`可以方便地读取Excel文件,而`Nokogiri`则可以用来创建和操作XML文档。 首先,我们需要了解`roo`库。`roo`是Ruby中用于读取不同类型的电子表格文件(如Excel、OpenOffice、Google Sheets)的库。安装`...

    ruby创建blog

    1.rails new blog --skip-bundle //创建项目 2.cd blog //进入项目根目录 3.subl . //打开项目开发环境 4.Bundle install //安装gem包环境 5.rails generate model post title:string content:text author:string ...

    Ruby-chewy高级ElasticsearchRuby框架

    Chewy的主要目标是简化Elasticsearch在Ruby应用中的集成,它通过定义索引模式(Index Patterns)和类型(Types)提供了面向对象的API。这使得开发者可以更加直观地处理索引的创建、更新和查询,而无需深入理解复杂的...

    ruby 快速开发web项目的教程

    Ruby on Rails(Rails)是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,极大地简化了Web应用的构建过程。通过Rails,开发者可以快速搭建功能丰富的网站,同时...

    Ruby on Rails入门经典代码

    - `generate model`:创建数据库模型,自动生成迁移文件。 4. **数据库和ActiveRecord**: - Migrations:用于数据库结构变更的Ruby脚本,通过`rake db:migrate`执行。 - Associations:定义模型之间的关系,如...

    ruby on rails 101

    - **Ruby语言**:深入理解Ruby语言的特性及其在Ruby on Rails中的应用。 - **测试**:介绍如何为Ruby on Rails项目编写单元测试和集成测试。 - **AJAX**:学习如何在Ruby on Rails应用中集成异步JavaScript和XML技术...

Global site tag (gtag.js) - Google Analytics