1

移行中に基本的なレールの問題が発生しています。ここに2つのスクリプトがあります

class CreateGoogleMaps < ActiveRecord::Migration
  def self.up
    create_table :google_maps do |t|
      t.string :name, :null => false
      t.string :description
      t.column "center", :point, :null => false, :srid => 4326, :with_z => false # 4326: WSG84
      t.integer :zoom
      t.datetime :created_at
      t.datetime :updated_at
      t.integer :created_by_id
      t.integer :updated_by_id
    end
  end

  def self.down
    drop_table :google_maps
  end
end

ファイル #2 +++ 003_add_map_style.rb ++++++

class AddMapStyle < ActiveRecord::Migration
  def self.up
      add_column :google_maps, :style, :integer
      GoogleMaps.update_all( "style = 1")
  end

  def self.down
      remove_column :google_maps, :style
  end
end
***********************************************

移行中に私が見ているものは次のとおりです == CreateGoogleMaps: 移行中 ==================================== ========== -- create_table(:google_maps) -> 0.0638s == CreateGoogleMaps: 移行 (0.0640s) =================== ==================

== CreateMarkers: 移行中 ============================================= ===== -- create_table(:markers) -> 0.0537s == CreateMarkers: 移行 (0.0539s) ======================== ================

== AddMapStyle: 移行中 ============================================= ======= -- add_column(:google_maps, :style, :integer) -> 0.0406 秒のレーキが中止されました! エラーが発生しました。以降の移行はすべてキャンセルされました:

初期化されていない定数 AddMapStyle::GoogleMaps

Rails 2.3.11 を使用しています。デバッグのヒントは大歓迎です!

4

2 に答える 2

1

移行ではモデルを使用しないでください。危険です。モデルが変更される可能性があります。スキーマを下から変更しながらActiveRecordオブジェクトを読み込もうとしています。

可能であれば、raw updateコマンドを実行する次の例のように、SQLを使用する必要があります。

class AddMapStyle < ActiveRecord::Migration
  def self.up
      add_column :google_maps, :style, :integer
      execute("UPDATE google_maps SET style=1")
  end

  def self.down
      remove_column :google_maps, :style
  end
end
于 2013-02-07T16:12:15.503 に答える
1

次のように、移行でモデルを安全に使用できます。

class AddMapStyle < ActiveRecord::Migration
  class GoogleMaps < ActiveRecord::Base; end

  def self.up
      add_column :google_maps, :style, :integer
      GoogleMaps.update_all( "style = 1")
  end

  def self.down
      remove_column :google_maps, :style
  end
end

クラスは移行クラス内で定義されているため、別の名前空間にあります。

于 2013-02-07T16:18:06.650 に答える