2010-12-31 16 views

Antwort

14

Dies wird es tun, wenn Sie alle Ihre Klassen ‚berührt‘ habe, aber nur für die tatsächliche Modelle:

ActiveRecord::Base.subclasses.map { |c| "#{c.name} => #{c.count}" } 

Wenn Sie wirklich alle Tabellen möchten, Tabellen einschließlich verbinden, die auf Modellen Karte nicht:

ActiveRecord::Base.connection.tables.map { |t| "#{t} => " + ActiveRecord::Base.connection.execute("select count(*) from #{t}").fetch_row.first} 
+0

Der zweite Befehl gibt mir einen Mysql-Fehler 'Sie haben einen Fehler in Ihrer SQL-Syntax ... überprüfen Sie für die richtige Syntax in der Nähe von 'Referenzen' in Zeile 1: Wählen Sie count (*) from references'. – sscirrus

+0

'Referenzen' ist ein reserviertes Wort in MySQL (http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html). Es wird wahrscheinlich funktionieren, wenn Sie Zitate oder Backticker um # {t} setzen. –

+5

Für Postgresql mit Rails 3.2.x musste die 2. Anweisung angepasst werden: 'ActiveRecord :: Base.connection.tables.map {| t | "# {t} =>" + ActiveRecord :: Base.connection.execute ("Wähle Anzahl (*) von # {t}"). zuerst ['count']} ' –

1

Dies könnte etwas länger sein als das, was man erhofft hatte, aber hofft, dass diese ;-)

Dir.glob('app/models/*.rb').each {|file| puts eval(File.basename(file, ".rb").classify + '.count').to_s + " #{File.basename(file, ".rb").classify.pluralize}"} 

hilft Es könnte besser sein, eine Rake Aufgabe dafür zu schaffen.

+0

Hallo Dave hilft, dank dafür! Ich habe einen seltsamen Fehler - ich habe ein Modell namens "Adresse" und aufgrund der Pluralisierung gibt es mir den Fehler "NameError: unitisierte konstante Addres". Sorry für das Problem - wie komme ich daran vorbei? – sscirrus

16
ActiveRecord::Base.connection.tables 

dies wird ein Array der Tabellen zurückkehren Sie haben, wenn Sie es nützlich finden.

0

Ich habe versucht, dies zu tun, und ich kam auf meine eigene Art und Weise, dies zu tun.

Ich mag verkapseln, wenn in ein Modell Wartung genannt, die keine aktiven Datensatz Modell ist

mein Modell wie

sieht
class Maintenance 
    def self.show_all_tables_count 
    list_table_with_count = [] 
    ActiveRecord::Base.connection.tables.each do |table| 
     unless ['ar_internal_metadata', 'schema_migrations'].include?(table) 
     list_table_with_count << [name: table, count: table.singularize.camelize.constantize.count] 
     end 
    end 
    list_table_with_count 
    end 
end 

Ich hoffe, dass diese

Verwandte Themen