我是fairly new to ruby and ROR
。我有几个关于迁移的问题。我看了看指南,但对我来说很困惑。
http://guides.rubyonrails.org/migrations.html
class CreateUserModel < ActiveRecord::Migration
def self_up
create_table :users do |t|
t.column :username, :string
t.column :email, :string
t.column :password_hash, :string
t.column :password_salt, :string
end
def self_down
drop_table :users
end
end
rake db:migrate
VERSION=20098252345
。我很困惑这个VERSION在做什么
用命令。我刚刚创建了一个迁移0001_create_user_model.rb migration
表。它是什么时候我创造的
运行/执行此文件。它会为我创建表格和模型吗?答案 0 :(得分:1)
rake命令的版本实际上是年,月等的时间戳... 这是为了指定您想要迁移的距离。
您在任何典型应用中都有许多迁移文件。由于所有这些迁移都会对数据库模式进行更改(即表,表名,表的属性列等)
Rails通过逐步构建迁移来处理定义模式(即创建表并指定表所具有的属性和列)。
这样可以方便地通过回滚和向前迁移来编辑架构......就像任何版本控制系统一样。
现在,您可以指定一个版本来指定您希望实际迁移到哪个迁移&#34;迁移&#34;将模式定义为...或者您可以运行rake db:migrate
将所有迁移文件运行到最后一个。我通常没有具体指定版本,因为我通常会运行所有迁移到最新版本。这只是一个选择。如果您需要回滚某些迁移并更改某些内容,则会有rake db:rollback
等命令,其中包含指定步骤数等的各种选项,您也可以使用这些命令。
这通常有效。如果您的模型中有数据表中的数据记录(即行)验证,则可能会遇到迁移问题,您可以在http://guides.rubyonrails.org/migrations.html
的第6部分中详细了解这些问题。答案 1 :(得分:1)
20098252345
中的rake db:migrate VERSION=20098252345
只是一个位于db/migrate
目录中的迁移文件的前缀数字。只有一个UTC timestamp(YYYYMMDDHHMMSS)
来区分一个文件另一个。生成的迁移文件将如下所示20098252345_create_user_model.rb
来自Guides
内部Rails仅使用迁移的编号(时间戳)来识别它们。在Rails 2.1之前,迁移号从1开始,每次生成迁移时都会递增。对于多个开发人员来说,这些冲突很容易让您回滚迁移并重新编号。使用Rails 2.1+,通过使用迁移的创建时间来识别它们,可以在很大程度上避免这种情况。您可以通过将以下行添加到config / application.rb来恢复到旧的编号方案。
config.active_record.timestamped_migrations = false
希望它有所帮助!