2008-09-30 30 views
95

सक्रिय रिकॉर्ड का उपयोग करते समय डेटाबेस के लिए परिभाषित सभी तालिकाओं की सूची कैसे प्राप्त करूं? की तरह वहाँ एक बेहतर तरीका होना चाहिएसक्रिय रिकॉर्ड का उपयोग करते समय डेटाबेस के लिए परिभाषित सभी तालिकाओं की सूची कैसे करें?

चयन TABLE_NAME INFORMATION_SCHEMA.Tables से जहां TABLE_TYPE = 'आधार तालिका'

उत्तर

202

कॉल ActiveRecord::ConnectionAdapters::SchemaStatements#tables पर कॉल करें। यह विधि MySQL एडाप्टर में अनियंत्रित है, लेकिन PostgreSQL एडाप्टर में प्रलेखित है। SQLite/SQLite3 में भी विधि लागू की गई है, लेकिन अनियंत्रित है।

>> ActiveRecord::Base.connection.tables 
=> ["accounts", "assets", ...] 

activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21 देखें, साथ ही यहां कार्यान्वयन:

+1

सूची में 'schema_migrations' तालिका भी शामिल है। बस जागरूक रहें। धन्यवाद :) – imechemi

0

सक्रिय रिकॉर्ड के बारे में पता नहीं है, लेकिन यहाँ एक सरल प्रश्न है , लेकिन यहाँ है कि कैसे मैं मेरी समस्या हल:

Dir["app/models/*.rb"].each do |file_path| 
    require file_path # Make sure that the model has been loaded. 

    basename = File.basename(file_path, File.extname(file_path)) 
    clazz  = basename.camelize.constantize 

    clazz.find(:all).each do |rec| 
    # Important code here... 
    end 
end 

इस कोड को मानता है कि आप वर्गों और स्रोत कोड फ़ाइलों के लिए मानक मॉडल नामकरण सम्मेलनों का अनुसरण कर रहे।

13

दो पिछले जवाब के आधार पर, तुम कर सकते हो:

ActiveRecord::Base.connection.tables.each do |table| 
    next if table.match(/\Aschema_migrations\Z/) 
    klass = table.singularize.camelize.constantize  
    puts "#{klass.name} has #{klass.count} records" 
end 

रिकॉर्ड्स की संख्या के साथ तालिका को सारणीबद्ध करने वाले प्रत्येक मॉडल को सूचीबद्ध करने के लिए।

+1

सिंगल-लाइन कट्टरपंथियों के लिए (रेगेक्स तालिका मिलान की अतिरिक्त सुरक्षा के बिना): (ActiveRecord :: Base.connection.tables - ['schema_migrations'])। नक्शा {| टी | "# {t.classify} में # {t.classify.constantize.count} रिकॉर्ड हैं"} –

+1

आप यहां रेगेक्स का उपयोग क्यों करते हैं? "अगला अगर टेबल == 'schema_migrations'" काम भी नहीं करेगा? – tbreier

संबंधित मुद्दे