.rename_table
é um método de instância, não um método de classe, portanto, a chamada Class.method
não vai funcionar. Em vez disso, você precisará criar uma instância da classe e chamar o método na instância, assim:Class.new.method
.
[EDIT] Nesse caso, ActiveRecord::ConnectionAdapters::SchemaStatements
nem sequer é uma classe (como apontado por cam), o que significa que você não pode nem mesmo criar uma instância dela conforme o que eu disse acima. E mesmo se você usou o exemplo de cam class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
, ele ainda não funcionaria comorename_table
uma exceção.
Por outro lado, ActiveRecord::ConnectionAdapters::MysqlAdapter
é uma classe e é provável que você precise renomear sua tabela (ou SQLite ou PostgreSQL, dependendo do banco de dados que você está usando). Agora, por acaso, ActiveRecord::ConnectionAdapters::MysqlAdapter
já está acessível Model.connection
, então você deve poder fazer isso completamenteModel.connection.rename_table
usando qualquer modelo em seu aplicativo. [/EDITAR]
No entanto, se você deseja renomear permanentemente uma tabela, sugiro usar uma migração para fazê-lo. É fácil e a maneira preferida de manipular sua estrutura de banco de dados com o Rails. Veja como fazê-lo:
# 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
Em seguida, você pode executar sua migração com rake db:migrate
(que chama o self.up
método) e usar rake db:rollback
(quais chamadas self.down
) para desfazer a migração.