.rename_tableist eine Instanzmethode, keine Klassenmethode, daher Class.methodfunktioniert 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::SchemaStatementshandelt 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_tableeine 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::MysqlAdapterbereits ü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.upMethode rake db:rollbackaufruft self.down) ausführen und mit (welche Aufrufe ) die Migration rückgängig machen.