joppot

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

プログラミング

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

投稿日:


gount_top_thumb

概要

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

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

sampledata

前提

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


カウントする

私の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

まとめ

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

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ReactでFaker.jsを利用してダミーデータを生成する

概要 みなさんこんにちはcandleです。今回はFaker.jsをReactで使ってみようと思います。 Faker.jsの使用目的は様々あると思います。多くの場合はテストで使うと思うのですが、今回は簡 …

React WebでURLをaタグのリンクにして表示する

概要 みなさんこんにちはcandleです。今回はReactでコメントなどに投稿されたURLからリンクを生成する方法を紹介します。しかし、URLからリンクの自動生成は結構危険です。無尽蔵にリンク化を許可 …

railsのscaffoldでremote formで送信後jsonを取得する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxした時に、 サーバに送った値をjavascript側で受け取る方法を紹介します。 ちなみに、私は下の …

ruby on rails4でtwitter bootstrap 3のgemを使用してscaffoldを作成する

概要 みなさんこんにちはcandleです。今回はrails4上でtwitterbootstrap3のgemを使ってscaffoldしてみたいと思います。 scaffoldとはご存知のようにいわゆるwe …

memcachedサーバとruby on railsのdalliを使用してセッションを管理する

概要 みなさんこんにちはcandleです。今回はmemcachedサーバを利用してrailsのセッションを管理してみたいと思います。 一般にrailsでセッション管理をしていると、ブラウザのcooki …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー