Frage

Ich habe für meine Datenbank unter Entwicklung mit sqlite3 und meine app hat komplex genug bekommen, dass es ein bisschen langsam zu arbeiten.

Ich habe gerade eingeschaltet zu MySQL und laufe rake db:create ; rake db:migrate und einer meiner Wanderungen mit der folgenden Fehlermeldung fehlgeschlagen:

undefined method `alter_table` for #<ActiveRecord::ConnectionAdapters::MysqlAdapter:0xb6e6088c>

Ich habe eine schnelle Google hat und nichts aufgedreht. Dann überprüfte ich die API und es gibt keine dokumentierte Methode alter_table. Aber es funktioniert mit sqlite3!

Hier ist meine Migration:

class AddSettingsToUsers < ActiveRecord::Migration
  def self.up
    alter_table :users do |t|
      t.text signature
      ...
    end
  end

  ...

end

Das funktioniert wie bei sqlite3 erwartet.

Bin ich verrückt? Habe ich diese Methode nur erfinden und es passiert ist eine nicht dokumentierte Funktion sein, die nur auf einer Teilmenge der unterstützten Datenbanken funktionieren?

hat jemand einen kleinen Einblick auf diesem ??

War es hilfreich?

Lösung

Wie die anderen erwähnt, ist dies wahrscheinlich ein Verfahren nur für SQLite verwendet. Die Dokumention erwähnt change_table, so verwendet, dass man stattdessen sollte es die gleiche Weise arbeiten:

class AddSettingsToUsers < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.text :signature
      ...
    end
  end

  ...

end

Andere Tipps

Es scheint einzigartig zu sein, nur um SQLite

yvaine:activerecord-2.3.5 root# find . -type f -exec grep -l alter_table {} \;

./ lib / active_record / connection_adapters / sqlite_adapter.rb

Es wird wahrscheinlich sicherer, nur die change_column Methode stattdessen zu verwenden, wie die alten table Methode abstrahiert.

Diese zeigt es eine alter_table geschützte Methode in dem SQLite-Adapter.

Ich hatte verschiedene Handler für Java-Adapter SQLite in Bezug auf reguläre Ausdruck Manipulation. Vielleicht ist Schienen nicht vollständig über Adapter ausschließen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top