setoya-blog

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

ActiveRecordでDISTINCTを使う

今まで、以下のようにしていたが、

  Hoge.select('DISTINCT *').where(:hoge => true)

Railsの公式ガイドによると、uniqというメソッドを使うのが正式なやり方なので、

  Hoge.where(:hoge => true).uniq

これで、上のと同じselect文がかける。
ちなみに、なんでこんなことを調べたかというと、Kaminariでページングをしていた際に、前者のクエリだと、DISTINCTをする前の重複した行を統合する前の行数でページングがされてしまって、意図した動作にならなかったため。

後者だと重複した行を統一したあとの結果でページングされていた。