.rename_tablejest metodą instancji, a nie metodą klasową, więc wywołanie Class.methodnie będzie działać. Zamiast tego musisz utworzyć instancję klasy i wywołać metodę na przykład tak: Class.new.method.
[EDYTUJ] W tym przypadku ActiveRecord::ConnectionAdapters::SchemaStatementsnie jest to nawet klasa (na co wskazuje cam), co oznacza, że nie można nawet utworzyć jej instancji zgodnie z tym, co powiedziałem powyżej. Nawet jeśli użyjesz przykładu z kamery class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;, to nadal nie zadziała, ponieważ rename_tablewywołuje wyjątek.
Z drugiej strony ActiveRecord::ConnectionAdapters::MysqlAdapter jest to klasa i prawdopodobnie ta klasa musiałabyś użyć do zmiany nazwy tabeli (lub SQLite lub PostgreSQL, w zależności od używanej bazy danych). Teraz, jak to się dzieje, ActiveRecord::ConnectionAdapters::MysqlAdapterjest już dostępne przez Model.connection, więc powinieneś być w stanie to zrobić Model.connection.rename_table, używając dowolnego modelu w swojej aplikacji. [/EDYTOWAĆ]
Jeśli jednak chcesz trwale zmienić nazwę tabeli, sugerowałbym skorzystanie z migracji, aby to zrobić. Jest to łatwy i preferowany sposób manipulowania strukturą bazy danych w Railsach. Oto jak to zrobić:
# 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
Następnie możesz uruchomić migrację za pomocą rake db:migrate(która wywołuje self.upmetodę) i użyć rake db:rollback(które wywołania self.down), aby cofnąć migrację.