Was ist der Deal mit Rails' ALTER_TABLE Methode?
-
21-09-2019 - |
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 ??
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.