【Rails入門】uniqで重複が無いモデルにしよう!distinctにも対応オオイシ2018/8/282019/5/10こんにちは!システムエンジニアのオオイシです。「SQLのDISTINCTをRailsで実行」などの課題を解決できます。そこで今回は以下の内容について解説していきます。まとめuniqメソッドとは?distinctとの違いuniqメソッドとは、Railsで取得した重複レコードを1つにまとめるためのメソッドです。uniqメソッドを実行すると、Railsは内部的にSQLのDISTINCTを実行します。その他に、uniqメソッドとまったく同じ働きをするdistinctメソッドも存在します。Rails5以降で正式メソッドとなっているので注意しましょう!そのため、これからはdistinctメソッドを使うようにしてください。本記事でもdistinctメソッドで解説します。SQLのDISTINCTについては、こちらで詳しく解説しているため、ぜひ参考にしてください。モデル.select(列名).distinctRailsのログを確認するとこのようなSQLが実行されます。`テーブル名`次項では、distinctメソッドの使い方を詳しく解説していきます。uniq(distinct)メソッドを使ってみよう!ここでは、distinctメソッドの使い方をサンプルコードを使って解説します。姓(last_name)と名(first_name)のカラムをもつSampleモデルを作成し、distinctメソッドの動きを確認してみましょう。サンプルモデルの作成はじめに、Sampleモデルを作成します。コンソールでテストデータを投入します。set登録したサンプルデータを使って、distinctメソッドを使ってみましょう。Recordの検索結果を一覧で確認できるようにするために、HirbというGemを使っています。こちらに解説があるので参考にしてみてください。2019年8月9日Railsのモデルについてはこちらで詳しく解説しています。準備が整いましたので、distinctメソッドを使って、姓(last_name)の重複をまとめて表示するサンプルコードを見てみましょう。setirb(main):006:0>このように、重複がないレコードが取得できました。複数列でdistinctメソッドを使う複数の列を指定してdistinctした場合には、複数列を合わせてユニークになるように重複がまとめられます。モデル.select(列名,列名...).distinct姓(last_name)と名(first_name)の2列に対してdistinctするサンプルコードを確認して見ましょう。setこのように、複数列で重複のないレコードを取得することができました。distinctして件数を調べるにはdistinctを使ってレコード件数を数える方法について紹介します。モデルのデータ件数を数えるためにsizeメソッドがありますが、これを組み合わせて件数を取得します。モデル.select(列名,列名...).distinct.size重複のない姓(last_name)の件数を調べる、サンプルコードを確認して見ましょう。1このように、レコードの件数を数えることができました。rubyの配列にはuniqメソッドを使うRubyの配列には、重複を1つにまとめるuniqメソッドがあるため、こちらも紹介します。姓(last_name)のレコードを配列で取得して、uniqメソッドで重複のない配列を取得するサンプルコードを確認して見ましょう。["侍"]このように重複のない配列を取得することができました。pluckの使い方については、こちらで詳しく解説しているのでぜひ参考にしてください。2019年5月10日まとめいかかでしたか?今回は、Railsのuniq(distinct)メソッドの使い方をについて解説しました。uniq(distinct)メソッドは、Railsで取得した重複レコードを1つにまとめるためのメソッドです。uniq(distinct)メソッドを使うと、Rails内部ではSQLのDISTINCTが実行されるため、何かと利用頻度の多いメソッドです。uniq(distinct)メソッドの使い方を忘れてしまったらこの記事を確認してくださいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。