📅  最后修改于: 2020-10-20 05:27:42             🧑  作者: Mango
Rails Migration允许您使用Ruby定义对数据库模式的更改,从而可以使用版本控制系统来使事物与实际代码保持同步。
这有很多用途,包括-
开发人员团队-如果一个人进行模式更改,则其他开发人员只需要更新并运行“ rake migration”。
生产服务器-推出新版本时运行“ rake migration”以使数据库也保持最新。
多台机器-如果您同时在台式机和笔记本电脑上或在多个位置上进行开发,则迁移可以帮助您使它们保持同步。
迁移支持所有基本数据类型-以下是迁移支持的数据类型列表-
字符串-用于小数据类型,例如标题。
文本-用于更长的文本数据,例如描述。
整数-用于整数。
浮-为小数。
datetime和timestamp-将日期和时间存储到列中。
日期和时间-仅存储日期或仅存储时间。
二进制-用于存储图像,音频或电影等数据。
布尔值-用于存储true或false值。
有效的列选项是-以下是有效的列选项的列表。
限制(:limit =>“ 50”)
默认(:default =>“ blah”)
null (:null => false表示NOT NULL )
注–由Rails Migration完成的活动可以使用任何前端GUI或直接在SQL提示符下完成,但是Rails Migration使所有这些活动非常容易。
有关这些的详细信息,请参见Rails API 。
这是用于创建迁移的通用语法-
application_dir> rails generate migration table_name
这将创建文件db / migrate / 001_table_name.rb。迁移文件包含描述数据库表数据结构的基本Ruby语法。
注意–运行迁移生成器之前,建议清除模型生成器生成的现有迁移。
我们将创建与三个表相对应的两个迁移-书籍和主题。
图书迁移应如下-
tp> cd library
library> rails generate migration books
上面的命令生成以下代码。
主题迁移应如下-
tp> cd library
library> rails generate migration subjects
上面的命令生成以下代码。
请注意,在创建迁移时,您将书本,主题和复数形式都使用小写字母。这是每次创建迁移时都应遵循的Rails范例。
转到应用程序的db / migrate子目录,并使用任何简单的文本编辑器逐个编辑每个文件。
如下修改001_books.rb-
ID列将自动创建,因此在此也不要这样做。
class Books < ActiveRecord::Migration
def self.up
create_table :books do |t|
t.column :title, :string, :limit => 32, :null => false
t.column :price, :float
t.column :subject_id, :integer
t.column :description, :text
t.column :created_at, :timestamp
end
end
def self.down
drop_table :books
end
end
迁移到新版本时,将使用self.up方法,如果需要,将使用self.down方法回滚所有更改。这时,以上脚本将用于创建books表。
修改002_subjects.rb如下-
class Subjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :name, :string
end
Subject.create :name => "Physics"
Subject.create :name => "Mathematics"
Subject.create :name => "Chemistry"
Subject.create :name => "Psychology"
Subject.create :name => "Geography"
end
def self.down
drop_table :subjects
end
end
上面的脚本将用于创建主题表,并将在主题表中创建五个记录。
现在,您已经创建了所有必需的迁移文件。现在该对数据库执行它们了。为此,请转到命令提示符,然后转到应用程序所在的库目录,然后键入rake migration ,如下所示:
library> rake db:migrate
这将创建一个“ schema_info”表(如果该表不存在),该表将跟踪数据库的当前版本-每个新迁移都将是一个新版本,并且任何新迁移都将运行,直到您的数据库为当前版本为止。
Rake是一种Ruby构建程序,类似于Rails所利用的Unix make程序,它可以简化复杂任务的执行,例如更新数据库的结构等。
如果要指定用于迁移的Rails环境,请使用RAILS_ENV shell变量。
例如-
library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate
注–在Windows中,使用“ set RAILS_ENV = production”代替导出命令。
现在,我们有了数据库和所需的表。在随后的两章中,我们将探讨两个重要的组件,分别称为控制器(ActionController)和视图(ActionView)。