概要
皆さんこんにちはcandleです。
今回は、railsでレコードのデータそれぞれ何個あるのか数える方法を紹介します。
mysqlだと簡単なのですが、railsだとよくわからなかったので、いろいろやったらできました。
例えば、下の画像のcategoryはそれぞれ、何個あるかを数えます。
前提
適当なrailsプロジェクトがある
カウントする
私のItemモデルにはcategoryフィールドがあります。
私は管理しやすいinteger型で0 〜 3までの値をいれています。
これにrailsのenumを使って、制御しています。
それでは取得します。
コントローラーで一般に以下のように書きます。
モデル.group(:カウントしたいフィールド).count(:カウントしたいフィールド)
今回の場合ですと、モデルはItem、カウントしたいフィールドはcategoryになります。
Item.group(:category).count(:category)
例えば、以下のようなデータがあったとします。
上のCategoryを見ると
ITは3つ
食べ物は2つ
仕事は1つ
趣味は2つあります。
先ほどのプログラムでこれが取得できれば良いわけです。
これを実行してみると、以下のような結果が得られます。
数字なので、わかりづらいですが、0がIT、1が食べ物、2が仕事、3が趣味になっています。
得られたカウントはあっていますね。
おまけ
ちなみに、フィールドがinteger以外はどうなるか気になったので、categoryではなく、titleでやってみたところ、以下のようになりました。あいにく重複しているデータがなかったので、全部1ですが。
まとめ
データベースへのアクセスは極力減らすがパフォーマンスの良い、アプリケーションになります。