sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

ActiveRecordでDISTINCTを使う

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

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

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

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

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

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