.rename_table
це метод примірника, а не метод класу, тому виклик Class.method
не працює. Натомість вам доведеться створити екземпляр класу та викликати метод на екземпляр, наприклад:Class.new.method
.
[EDIT] У цьому випадку ActiveRecord::ConnectionAdapters::SchemaStatements
це навіть не клас (як вказував cam), а це означає, що ви навіть не можете створити його екземпляр відповідно до сказаного вище. І навіть якщо ви використовували приклад камери class Foo; include ActiveRecord::ConnectionAdapters::SchemaStatements; def bar; rename_table; end; end;
, він все одно не буде працюватиrename_table
викликає виняток.
З іншого боку, ActiveRecord::ConnectionAdapters::MysqlAdapter
це клас, і, ймовірно, цей клас вам доведеться використовувати для перейменування таблиці (або SQLite або PostgreSQL, залежно від бази даних, яку ви використовуєте). Тепер, як це відбувається, ActiveRecord::ConnectionAdapters::MysqlAdapter
вже доступний через Model.connection
, тому ви повинні бути повністю здатні це зробитиModel.connection.rename_table
, використовуючи будь-яку модель у вашій програмі. [/ EDIT]
Однак, якщо ви хочете остаточно перейменувати таблицю, я б запропонував використовувати для цього міграцію. Це простий і бажаний спосіб маніпулювання структурою вашої бази даних з Rails. Ось як це зробити:
# 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
Потім ви можете запустити міграцію за допомогою rake db:migrate
(який викликає self.up
метод) та використовувати rake db:rollback
(який викликає self.down
) скасування міграції.