2010-12-31 15 views

答えて

14

すべてのあなたのクラスを「触れ」てきた場合、これが唯一の実際のモデルのため、それを行います。

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

あなたが本当にモデルにマッピングしていないテーブルを結合含め、すべてのテーブルをしたい場合:

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

2番目のコマンドは私にMysqlエラー「あなたはSQL構文に誤りがあります...」という行為をしています。 – sscirrus

+0

'references'はMySQLの予約語です(http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html)。 #{t}の周りに引用符やバッキングを置くとうまくいくでしょう。 –

+5

PostgreSQLとRails 3.2.xの場合、2番目のステートメントを調整する必要がありました: 'ActiveRecord :: Base.connection.tables.map {| t | "#{t} =>" +アクティブレコード:Base.connection.execute( "select count(*)from#{t}")。first ['count']} ' –

1

これは、あなたが望んでいたものよりも少し長くなるが、これは;-)

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

このためのrakeタスクを作成する方がよいかもしれませんが役に立てば幸いかもしれません。

+0

こんにちはデイブ、おかげで役立つことを願ってこのため!私は特異なエラーを持っています - 私は 'Address'というモデルを持っていて、複数形のために 'NameError:unitialized constant Addres'というエラーを出しています。申し訳ありませんが、問題を解決するにはどうしたらいいですか? – sscirrus

16
ActiveRecord::Base.connection.tables 

あなたはそれが役に立つ見つけた場合、これは、あなたが持っているテーブルの配列を返します。

0

私はこれをやろうとしていましたが、私は自分のやり方を考え出しました。

アクティブレコードモデルではありません、私がモデルに 呼び出された場合のメンテナンスカプセル化したいと

私のモデルは

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 

のように見える私は、これは

関連する問題