Ich möchte eine Tabelle umbenennen ... (eine beliebige Tabelle.)
Ich habe diese Codezeile ausprobiert:
ActiveRecord::ConnectionAdapters::SchemaStatements.rename_table(old_name, new_name)
Hier ist das Seltsame. Ich weiß, dass es zum ersten Mal funktioniert hat, aber jetzt wird folgende Fehlermeldung angezeigt: undefinierte Methode `rename_table 'für ActiveRecord :: ConnectionAdapters :: SchemaStatements: Module
Gab es etwas, das ich einstellen musste?
ruby-on-rails
Tommy
quelle
quelle
rename_table
Methode ist in der definiertActiveRecord::ConnectionAdapters::SchemaStatements
. Es soll in andere Module eingemischt werden. Wenn Sie es direkt ausführen wollten, könnten Sie es tuninclude ActiveRecord::ConnectionAdapters::SchemaStatements; rename_table :foo, :bar
Denken Sie daran, dass Sie in Rails> = 3.1 die
change
Methode verwenden können.quelle
:old_table_name
nach:new_table_name
.rename_table
ist eine Instanzmethode, keine Klassenmethode, daherClass.method
funktioniert das Aufrufen nicht. Stattdessen müssen Sie eine Instanz der Klasse erstellen und die Methode für die Instanz wie folgt aufrufen :Class.new.method
.[BEARBEITEN] In diesem Fall
ActiveRecord::ConnectionAdapters::SchemaStatements
handelt es sich nicht einmal um eine Klasse (wie von cam hervorgehoben), was bedeutet, dass Sie nicht einmal eine Instanz davon erstellen können, wie oben angegeben. Und selbst wenn Sie das Beispiel von cam verwendenclass Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
würden, würde es nicht funktionieren, da diesrename_table
eine Ausnahme auslöst.Auf der anderen Seite
ActiveRecord::ConnectionAdapters::MysqlAdapter
handelt es sich um eine Klasse, und es ist wahrscheinlich, dass Sie diese Klasse verwenden müssen, um Ihre Tabelle umzubenennen (oder SQLite oder PostgreSQL, je nachdem, welche Datenbank Sie verwenden). Jetzt ist es zufälligActiveRecord::ConnectionAdapters::MysqlAdapter
bereits über zugänglichModel.connection
, sodass Sie in der Lage sein solltenModel.connection.rename_table
, jedes Modell in Ihrer Anwendung zu verwenden. [/BEARBEITEN]Wenn Sie jedoch eine Tabelle dauerhaft umbenennen möchten, würde ich vorschlagen, eine Migration zu verwenden, um dies zu tun. Es ist einfach und die bevorzugte Methode, Ihre Datenbankstruktur mit Rails zu bearbeiten. So geht's:
Anschließend können Sie Ihre Migration mit
rake db:migrate
(die dieself.up
Methoderake db:rollback
aufruftself.down
) ausführen und mit (welche Aufrufe ) die Migration rückgängig machen.quelle
rename_table
eine Instanzmethode ist, die jedoch nicht in einer Klasse definiert ist, sodass Ihr Aufruf zum AufrufenClass.new.method
nicht funktioniert (Beispiel: GibtActiveRecord::ConnectionAdapters::SchemaStatements.new
den FehleroMethodError: undefined method
neu 'für ActiveRecord :: ConnectionAdapters :: SchemaStatements: Module`rake db:migrate
oderrake db:rollback
nicht umbenennen , wenn der Tabelle ein Modell zugeordnet ist . Sie müssen die Datei model.rb manuell ändern.def change
rename_table :my_table, :my_new_table
end
change
add_column
add_index
add_timestamps
create_table
remove_timestamps
rename_column
rename_index
rename_table
quelle