Rails:通过迁移填充现有 table
Rails: populate an existing table via a migration
假设我在 Rails:
中有一个现有的迁移
class CreateStudies < ActiveRecord::Migration
def change
create_table :studies do |t|
t.string :display_name, null: false
t.string :tag_name, null: false
t.timestamps
end
add_index :studies, :tag_name, unique: true
end
end
后来我意识到我想用一些行来填充这个 table 而我不想使用 rake db:rollback
或 seeds.rb 文件。新迁移文件的格式是什么?
我认为使用 rake 任务 生成一些新对象比使用迁移更好。这是一个示例代码 https://github.com/maxmilan/Adverts_desk/blob/master/lib/tasks/advert_generators.rake#L3。您还可以发送生成对象的数量作为任务的参数。
刚刚:
在命令提示符下生成:
rails generate migration AddInitialStudies
并修改生成迁移的up
和down
方法:
class AddInitialStudies < ActiveRecord::Migration
def up
Study.create(display_name: "Example name", tag_name: "example_name")
end
def down
Study.delete_all
end
end
此时我生成了一个 Study 对象,但您可以添加任意多个。
在 down
上,删除在 up
上添加的记录,因为回滚和再次迁移会重复添加的记录。我假设唯一的研究记录是在 up
上创建的。注意 :tag_name
,它必须是唯一的。
假设我在 Rails:
中有一个现有的迁移class CreateStudies < ActiveRecord::Migration
def change
create_table :studies do |t|
t.string :display_name, null: false
t.string :tag_name, null: false
t.timestamps
end
add_index :studies, :tag_name, unique: true
end
end
后来我意识到我想用一些行来填充这个 table 而我不想使用 rake db:rollback
或 seeds.rb 文件。新迁移文件的格式是什么?
我认为使用 rake 任务 生成一些新对象比使用迁移更好。这是一个示例代码 https://github.com/maxmilan/Adverts_desk/blob/master/lib/tasks/advert_generators.rake#L3。您还可以发送生成对象的数量作为任务的参数。
刚刚:
在命令提示符下生成:
rails generate migration AddInitialStudies
并修改生成迁移的up
和down
方法:
class AddInitialStudies < ActiveRecord::Migration
def up
Study.create(display_name: "Example name", tag_name: "example_name")
end
def down
Study.delete_all
end
end
此时我生成了一个 Study 对象,但您可以添加任意多个。
在 down
上,删除在 up
上添加的记录,因为回滚和再次迁移会重复添加的记录。我假设唯一的研究记录是在 up
上创建的。注意 :tag_name
,它必须是唯一的。