Ruby on Railsで条件ごとのレコード数をcountで取得する方法【メンターが回答】

「Railsで条件ごとのレコード数をcountで取得したい」という質問にTechAcademyのメンターが回答しています。使い方をぜひ理解しておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

※TechAcademyに実際に寄せられた質問に現役エンジニアのメンターが回答しました。

 

田島悠介

質問に対して現役のエンジニアが回答していくシリーズだね!

大石ゆかり

今回はどういう質問でしょうか?

田島悠介

今回は、Railsに関する内容だね!実際に回答してもらった内容を紹介するね!

大石ゆかり

お願いします!

質問

Ruby on Railsで掲示板サービスを作っています。

投稿する際に性別を選択するようにしていますが、投稿した中から性別ごとの件数の取り方、表示の仕方がわかりません。

SQLで書くと下記のようになると思います。

select count(*) as cnt from 投稿 where 性別 = ‘男性’;

Railsではどのように書けばよいのでしょうか。

 

メンターからの回答

投稿のデータを保存する ActiveRecord クラスを Post、性別を表すカラムを gender とすると、

Post.where(gender: '男性')

これは、男性の投稿全体を表します。これに .count メソッドをつけて、

Post.where(gender: '男性').count

とすると、男性が投稿した件素が返ってきて、SQL で書いたときと同じ結果が得られます。

ここで、さらに発展として、group + count を使って、

Post.group(:gender).count

のように書くと、gender の値をキーとした Hash に、以下の様にそれぞれの件数が入ったものが得られます。男性と女性で2回SQLを実行するよりも、効率よく件数を取り出すことが可能です。

{'男性' => 23, '女性' => 32}

 

大石ゆかり

回答分かりやすかったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

他にもメンターが回答したRubyのrequireを使う場合に変数を扱う方法の記事も合わせてご覧ください。

また、TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。