.rename_table
ist eine Instanzmethode, keine Klassenmethode, daher Class.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 verwenden class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
würden, würde es nicht funktionieren, da dies rename_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ällig ActiveRecord::ConnectionAdapters::MysqlAdapter
bereits über zugänglich Model.connection
, sodass Sie in der Lage sein sollten Model.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:
# Commandline
rails generate migration rename_my_table
# In db/migrate/[timestamp]_rename_my_table.rb:
class RenameMyTable < ActiveRecord::Migration
def self.up
rename_table :my_table, :my_new_table
end
def self.down
rename_table :my_new_table, :my_table
end
end
Anschließend können Sie Ihre Migration mit rake db:migrate
(die die self.up
Methode rake db:rollback
aufruft self.down
) ausführen und mit (welche Aufrufe ) die Migration rückgängig machen.