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. upおよびdownメソッド (できれば 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は決して実行されません。

2 つのソリューションがすぐに現れます。

  1. upの anddownメソッドを使用します。ガイドの「移行でのモデルの使用」セクションを確認することをお勧めします。
  2. 2 つの個別の移行を使用します。1 つはテーブルを作成するため、もう 1 つはユーザーを作成するためです。

私はおそらく2で行きます。

于 2012-04-25T08:55:50.557 に答える