2013-03-12 6 views
8

私は2つのモデル - Question,Tagを持っています。とにかくRails Consoleの結合テーブルにアクセスするには?

私は、questions_tagsジョインテーブルのレコード数をcountとしたいと思います。

どのようにしてRailsコンソールから行うことができますか?

Question.connection.execute "select count(*) from questions_tags" 

これはあなたのDBに依存し、結果を取得する:あなたは、モデル(単に結合表)に参加している、あなたがカウントを取得するために、既存のモデルのうちの1つを介して、いくつかの任意のSQLを実行することはできませんと仮定すると、

答えて

5

オブジェクト。 PostgreSQLの場合、実際の整数を取得するには、

Question.connection.execute("select count(*) from questions_tags").first["count"].to_i 
+0

これを行うにはもっと "Railsy"の方法はわかりませんが、あなたの質問はコンソールからのアクセスに関するものなので、デバッグなどのためにそれらを数える簡単な方法を探しているだけです。私は生産上の上記のコードをお勧めしません。あなたのアプリケーションでジョインテーブルのカウントが必要な場合は、実際のジョインモデルに昇格させたい場合があります。 –

+0

ええ...そうです...これはデバッグのためのものです。多くのレコード(20K)を持つ結合テーブルでこれらの種類のクエリを実行すると、通常は非常に時間がかかりますか?私はあなたがそれを掲示した後、ほぼ2分後にそれを走らせ、それはまだ動いている。 – marcamillion

+0

それは基礎となるデータベースに大きく依存しますが、 'count(*)'がリアルタイムで取ることには驚いています。ほとんどのDBは、計算することなくすべてのテーブルのカーディナリティを知っています。上記の単純な例よりもクエリが複雑な場合は、テーブルにインデックスがないことが原因です。 DBのパフォーマンスは一般的に非常に複雑な問題です。 –

関連する問題