.rename_table
est une méthode d'instance, et non pas une méthode de classe, afin de l'appelant Class.method
n'est pas d'aller travailler. Au lieu de cela, vous devez créer une instance de la classe, et d'appeler la méthode sur l'exemple, comme ceci: Class.new.method
.
[MODIFIER]
Dans ce cas, ActiveRecord::ConnectionAdapters::SchemaStatements
n'est même pas une classe (comme l'a souligné cam), ce qui signifie que vous ne pouvez même pas créer une instance de ce que par ce que j'ai dit ci-dessus. Et même si vous avez utilisé cam exemple d' class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
, il n'aurait toujours pas de travail en tant que rename_table
lève une exception.
D'autre part, ActiveRecord::ConnectionAdapters::MysqlAdapter
est une classe, et il est probable que cette classe que vous auriez à utiliser pour renommer votre table (ou SQLite ou PostgreSQL, selon la base de données que vous utilisez). Maintenant, comme il arrive, ActiveRecord::ConnectionAdapters::MysqlAdapter
est déjà accessible par Model.connection
, de sorte que vous devriez être tout à fait capable de le faire Model.connection.rename_table
, à l'aide de n'importe quel modèle dans votre application.
[/EDIT]
Cependant, si vous souhaitez en permanence renommer une table, je voudrais suggérer à l'aide d'une migration de le faire. Il est facile et le moyen privilégié de la manipulation de votre structure de base de données avec des Rails. Voici comment faire:
# 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
Ensuite, vous pouvez exécuter votre migration avec rake db:migrate
(qui appelle l' self.up
méthode), et d'utiliser rake db:rollback
(qui appelle self.down
) pour annuler la migration.