.rename_table
adalah metode instan, bukan metode kelas, jadi memanggil Class.method
tidak akan berfungsi. Sebaliknya Anda harus membuat sebuah instance dari kelas, dan memanggil metode pada contoh, seperti ini: Class.new.method
.
[EDIT] Dalam contoh ini, ActiveRecord::ConnectionAdapters::SchemaStatements
bahkan bukan kelas (seperti yang ditunjukkan oleh cam), yang berarti bahwa Anda bahkan tidak dapat membuat turunannya seperti yang saya katakan di atas. Dan bahkan jika Anda menggunakan contoh cam class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
, tetap saja tidak akan berhasilrename_table
menimbulkan pengecualian.
Di sisi lain, ActiveRecord::ConnectionAdapters::MysqlAdapter
adalah kelas, dan kemungkinan kelas ini yang harus Anda gunakan untuk mengubah nama tabel Anda (atau SQLite atau PostgreSQL, tergantung pada database apa yang Anda gunakan). Sekarang, seperti yang terjadi, ActiveRecord::ConnectionAdapters::MysqlAdapter
sudah dapat diakses Model.connection
, jadi Anda harus benar-benar dapat melakukannya Model.connection.rename_table
, menggunakan model apa pun dalam aplikasi Anda. [/ EDIT]
Namun, jika Anda ingin mengganti nama tabel secara permanen, saya akan menyarankan menggunakan migrasi untuk melakukannya. Mudah dan cara yang disukai untuk memanipulasi struktur basis data Anda dengan Rails. Inilah cara melakukannya:
# 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
Lalu, Anda dapat menjalankan migrasi dengan rake db:migrate
(yang memanggil self.up
metode), dan menggunakan rake db:rollback
(yang memanggil self.down
) untuk membatalkan migrasi.