.rename_tablebir sınıf yöntemi değil, bir örnek yöntemidir, bu nedenle çağrı Class.methodişe yaramaz. Bunun yerine bu gibi örneğinde yöntemi sınıfının bir örneğini oluşturmak ve çağrı gerekecek: Class.new.method.
[DÜZENLEME] Bu örnekte, ActiveRecord::ConnectionAdapters::SchemaStatementsbir sınıf bile değil (cam tarafından işaret edildiği gibi), bu da yukarıda söylediğim gibi onun bir örneğini bile oluşturamayacağınız anlamına gelir. Cam'ın örneğini kullansanız bile class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;, yine de rename_tablebir istisna yaratacak şekilde çalışmaz .
Öte yandan, ActiveRecord::ConnectionAdapters::MysqlAdapter olan bir sınıf ve büyük olasılıkla (kullanmakta olduğunuz veritabanı bağlı veya SQLite veya PostgreSQL) tablonuzu yeniden adlandırmak için kullanmak zorunda kalacak bu sınıftır. Şimdi, olduğu gibi ActiveRecord::ConnectionAdapters::MysqlAdapter, zaten erişilebilir Model.connection, bu yüzden Model.connection.rename_tableuygulamanızdaki herhangi bir modeli kullanarak tamamen yapabilmeniz gerekir . [/DÜZENLE]
Ancak, bir tabloyu kalıcı olarak yeniden adlandırmak isterseniz, bunu yapmak için bir taşıma işlemi kullanmanızı öneririm. Rails ile veritabanı yapınızı değiştirmenin kolay ve tercih edilen yolu. Bunu nasıl yapacağınız aşağıda açıklanmıştır:
# 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
Ardından, taşıma işleminizi rake db:migrate( self.upyöntemi çağıran ) ile çalıştırabilir ve taşıma işlemini geri almak için rake db:rollback(hangi çağrıları self.down) kullanabilirsiniz.