Rails:通过迁移填充现有表

时间:2015-04-24 11:30:53

标签: ruby-on-rails ruby 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

后来我意识到我想用多行填充这个表,我不想使用rake db:rollback或seeds.rb文件。新迁移文件的格式是什么?

2 个答案:

答案 0 :(得分:2)

只需:

在命令提示符下生成:

rails generate migration AddInitialStudies

修改生成迁移的updown方法:

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,它必须是唯一的。

答案 1 :(得分:1)

我认为最好使用 rake tasks 生成一些新对象而不是使用迁移。以下是示例代码https://github.com/maxmilan/Adverts_desk/blob/master/lib/tasks/advert_generators.rake#L3。您还可以将生成的对象数作为任务参数发送。