.rename_table
es un método de instancia, no un método de clase, por lo que llamar Class.method
no va a funcionar. En su lugar, tendrá que crear una instancia de la clase, y llame al método en la instancia, así: Class.new.method
.
[EDITAR] En esta instancia, ActiveRecord::ConnectionAdapters::SchemaStatements
ni siquiera es una clase (como lo señaló la cámara), lo que significa que ni siquiera puedes crear una instancia de ella según lo que dije anteriormente. E incluso si usaras el ejemplo de cam class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
, todavía no funcionaría, ya que rename_table
plantea una excepción.
Por otro lado, ActiveRecord::ConnectionAdapters::MysqlAdapter
es una clase, y es probable que tenga que usar esta clase para cambiar el nombre de su tabla (o SQLite o PostgreSQL, dependiendo de la base de datos que esté usando). Ahora, como sucede, ActiveRecord::ConnectionAdapters::MysqlAdapter
ya se puede acceder a él Model.connection
, por lo que debería poder hacerlo completamente Model.connection.rename_table
, utilizando cualquier modelo en su aplicación. [/EDITAR]
Sin embargo, si desea cambiar el nombre de una tabla de forma permanente, le sugiero que utilice una migración para hacerlo. Es fácil y la forma preferida de manipular la estructura de su base de datos con Rails. Aquí se explica cómo hacerlo:
# 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
Luego, puede ejecutar su migración con rake db:migrate
(que llama al self.up
método) y usar rake db:rollback
(qué llamadas self.down
) para deshacer la migración.