1

我在 Heroku 上有一个应用程序,需要在那里清理数据库,再次使用新的默认行运行所有(编辑的)迁移(在迁移中将默认行添加到表中)。

我跑了

heroku run rake db:reset

此命令清除了数据库,但没有将新行添加到表中。我正在尝试以这种方式添加新行:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      ...columns definitions...

      t.timestamps
    end
  end

  def self.up
    Users.new(:name => 'my name', :password => 'super-secret-pass')
  end
end

但是没有添加新用户。我错过了什么?

4

1 回答 1

5

迁移应具有以下条件之一:

  1. 一种change方法。
  2. updown方法(最好是 3+ 中的实例方法,但类方法也可以)。

你有一个change方法一个self.up方法。迁移系统首先查找change

ActiveRecord::Base.connection_pool.with_connection do |conn|
  @connection = conn
  if respond_to?(:change)
    #...
  else
    time = Benchmark.measure { send(direction) }
  end
  @connection = nil
end

所以你self.up永远不会跑。

两种解决方案立即出现:

  1. 使用单独up的和down方法。您可能需要查看指南的“在您的迁移中使用模型”部分。
  2. 使用两个单独的迁移:一个用于创建表,另一个用于创建您的用户。

我可能会选择2

于 2012-04-25T08:55:50.557 回答