.rename_tableเป็นวิธีการแบบอินสแตนซ์ไม่ใช่วิธีการเรียนดังนั้นการเรียกใช้Class.methodจะไม่ทำงาน Class.new.methodแต่คุณจะต้องสร้างอินสแตนซ์ของระดับชั้นและเรียกวิธีการในกรณีเช่นนี้
[แก้ไข] ในกรณีActiveRecord::ConnectionAdapters::SchemaStatementsนี้ไม่ได้เป็นคลาส (ตามที่ระบุโดยลูกเบี้ยว) ซึ่งหมายความว่าคุณไม่สามารถสร้างตัวอย่างได้ตามที่ฉันพูดไว้ข้างต้น และแม้ว่าคุณจะใช้ตัวอย่างจากกล้องแคมของ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โดยใช้รูปแบบใด ๆ ในใบสมัครของคุณ [/ แก้ไข]
อย่างไรก็ตามหากคุณต้องการเปลี่ยนชื่อตารางอย่างถาวรฉันขอแนะนำให้ใช้การย้ายข้อมูลเพื่อดำเนินการ ง่ายและวิธีที่ต้องการในการจัดการโครงสร้างฐานข้อมูลของคุณด้วย 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) เพื่อยกเลิกการโยกย้าย