我在理解 Ruby on Rails 中的迁移时遇到了一些困难。我的应用程序中有以下两个类db\migrate\
目录(存储在单独的文件中):
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
def self.down
drop_table :users
end
end
class AddEmailUniquenessIndex < ActiveRecord::Migration
def self.up
add_index :users, :email, :unique => true
end
def self.down
remove_index :users, :email
end
end
我对这两个文件如何一起运行感到困惑。在创建第二个类时,迈克尔·哈特尔 (Michael Hartl) 的书说:“我们只需编辑迁移文件即可users表,但这需要回滚然后迁移回来。 Rails 方式是每次我们发现数据模型需要更改时都使用迁移。” 这些迁移实际上是如何工作的?迁移数据库时目录中的所有文件都运行吗?就像这里幕后发生的事情一样??
按照惯例,这些迁移类的文件名将以表示创建时间的时间戳为前缀(例如 20110611000000)。当您运行 db:migrate 时,rails 将检查数据库中的一个特殊表,其中包含应用于数据库的上次迁移的时间戳。然后,它将应用具有该日期之后时间戳的所有迁移,并使用上次迁移的时间戳更新数据库表。因此,每个迁移类只对数据库应用一次。
Michael Hart 表示,如果将所有迁移放入一个文件中,rails 将很难/不可能分辨哪些迁移已应用,哪些迁移未应用。此时唯一的选择是删除数据库中的所有表并从头开始运行所有迁移。从功能上来说这是可行的,但你会丢失所有数据。最好只朝“前进”的方向移动,而不是回到起点然后再次前进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)