Saya ingin mengganti nama tabel ... (tabel apa saja.)
Saya mencoba baris kode ini:
ActiveRecord::ConnectionAdapters::SchemaStatements.rename_table(old_name, new_name)
Inilah yang aneh. Saya tahu saya membuatnya berfungsi pertama kali, tetapi sekarang saya mendapatkan kesalahan ini: metode `rename_table 'tidak terdefinisi untuk ActiveRecord :: ConnectionAdapters :: SchemaStatements: Module
Apakah ada sesuatu yang perlu saya atur?
ruby-on-rails
Tommy
sumber
sumber
rename_table
metode ini didefinisikan dalamActiveRecord::ConnectionAdapters::SchemaStatements
. Ini dimaksudkan untuk dicampur ke modul lain. Jika Anda ingin menjalankannya secara langsung, saya pikir Anda bisa melakukannyainclude ActiveRecord::ConnectionAdapters::SchemaStatements; rename_table :foo, :bar
Ingat bahwa dalam Rails> = 3.1 Anda dapat menggunakan
change
metode ini.sumber
:old_table_name
ke:new_table_name
.rename_table
adalah metode instan, bukan metode kelas, jadi memanggilClass.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 camclass 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 diaksesModel.connection
, jadi Anda harus benar-benar dapat melakukannyaModel.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:
Lalu, Anda dapat menjalankan migrasi dengan
rake db:migrate
(yang memanggilself.up
metode), dan menggunakanrake db:rollback
(yang memanggilself.down
) untuk membatalkan migrasi.sumber
rename_table
adalah metode instan, tetapi tidak didefinisikan dalam kelas, jadi saran Anda untuk meneleponClass.new.method
tidak akan berfungsi (misalnya:ActiveRecord::ConnectionAdapters::SchemaStatements.new
memberikan kesalahanoMethodError: undefined method
baru 'untuk ActiveRecord :: ConnectionAdapters :: SchemaStatements: Module`rake db:migrate
ataurake db:rollback
tidak akan mengganti nama file model.rb. Anda perlu mengubah file model.rb secara manual.def change
rename_table :my_table, :my_new_table
end
. . . . . Dengan cara: Inside ofchange
Anda sebuah menggunakan perintah ini:add_column
,add_index
,add_timestamps
,create_table
,remove_timestamps
,rename_column
,rename_index
,rename_table
sumber