誰が今更こんなことを調べようか。
開発環境
- Ruby 1.8.7
- Rails 2.1.0
- SQLServer2008
なんだこの化石のような環境は
問題
pagenateでDISTINCTが使えない。
@data = VData.pagenate(:all,
:select =>'DISTINCT *', # <= こういうのはNG
:distinct => true, # <= こんなものはない
:page => 1,
:per_page => 20
).distinct # <= できません
調査
調べても新しいのしかでないよね。そりゃ。
と思ったらこんな記事が。
paginateの中で
(1):distinctオプションがなぜか不正としてはじかれてしまう
(2)paginateからcountに:distinctが渡されない
だめみたいですね。
結論としてはそのままではできない、ということ。
独自に実装するか、別の方法を考えようね・・・。
そもそも
古いシステムなのでしょうがないと思われるが、
一度しか登録されないのでキーが重複するはずがない、
しかしキーが重複してはいけないテーブルに、
一意制約がなく、何かの偶然で重複して登録されてしまった。
ので、・・・一意制約をつけるでもなく、DISTINCTをつけることに (なんで?)
データ設計からやりなおして・・・?
解決?
ビューを作ってそちらでDISTINCTするようにしました
(元々ビューを使っていたので新たに作った)
・・・と思ったら別の場所でLEFT JOIN 重複したテーブルしてた。
そっちはfindなのでDISTINCTつけようね・・・。同じような取得なのに対処違うの困るなぁ。