.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
अपने आवेदन में किसी भी मॉडल का उपयोग करते हुए पूरी तरह से सक्षम होना चाहिए । [/ संपादित करें]
हालाँकि, यदि आप किसी तालिका को स्थायी रूप से पुनर्नामित करना चाहते हैं, तो मैं यह करने के लिए एक प्रवास का उपयोग करने का सुझाव दूंगा। यह आसान है और रेल के साथ अपने डेटाबेस संरचना में हेरफेर करने का पसंदीदा तरीका है। यह कैसे करना है:
# 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
)।