joppot

コピペで絶対動く。説明を妥協しない

railsのmodelで各データが何個あるかカウントする

   

Pocket

gount_top_thumb

概要

皆さんこんにちはcandleです。
今回は、railsでレコードのデータそれぞれ何個あるのか数える方法を紹介します。
mysqlだと簡単なのですが、railsだとよくわからなかったので、いろいろやったらできました。

例えば、下の画像のcategoryはそれぞれ、何個あるかを数えます。

sampledata

前提

適当なrailsプロジェクトがある

SPONSORED LINK


カウントする

私のItemモデルにはcategoryフィールドがあります。
私は管理しやすいinteger型で0 〜 3までの値をいれています。

showitemtables

これにrailsのenumを使って、制御しています。

okcate

それでは取得します。
コントローラーで一般に以下のように書きます。

モデル.group(:カウントしたいフィールド).count(:カウントしたいフィールド)

今回の場合ですと、モデルはItem、カウントしたいフィールドはcategoryになります。

Item.group(:category).count(:category)

例えば、以下のようなデータがあったとします。

sampledata

上のCategoryを見ると
ITは3つ
食べ物は2つ
仕事は1つ
趣味は2つあります。

先ほどのプログラムでこれが取得できれば良いわけです。

debugresult

これを実行してみると、以下のような結果が得られます。

display_each_values

数字なので、わかりづらいですが、0がIT、1が食べ物、2が仕事、3が趣味になっています。
得られたカウントはあっていますね。

おまけ

ちなみに、フィールドがinteger以外はどうなるか気になったので、categoryではなく、titleでやってみたところ、以下のようになりました。あいにく重複しているデータがなかったので、全部1ですが。
title_count

alltitlecount

まとめ

データベースへのアクセスは極力減らすがパフォーマンスの良い、アプリケーションになります。

 - プログラミング ,