include指定時にdistinctを使う(検証中)

AR::findを使う時にdistinctを使うことはあったんだけど、includeオプションを一緒に使ったことが無かった。

使ってみるとうまく使えないという話なのでテストしてみた

game = Game.find(:all,:select=>"distinct name")
 => SELECT distinct name FROM games

ふーむ、単純にセットしてみるとsql文にdistinctが挿入されているな。これなら問題ないのか。

game = Game.find(:all,:select=>"distinct name",:include=>"majorsites")
 =>
 SELECT games."id" AS t0_r0, games."name" AS t0_r1, games."j_name" AS t0_r2, 
 games."search_word" AS t0_r3, games."year" AS t0_r4, games."valid" AS t0_r5, 
 games."created_at" AS t0_r6, games."updated_at" AS t0_r7, majorsites."id" AS t1_r0, 
 majorsites."name" AS t1_r1, majorsites."url" AS t1_r2 FROM games LEFT OUTER JOIN 
 game2sites ON (games."id" = game2sites."game_id") LEFT OUTER JOIN majorsites ON 
 (majorsites."id" = game2sites."majorsite_id")

なるほど。:selectが無視されるような動きになるのか。

これの場合は、特に中間テーブルを中継してデータを取りに行かせているのでそうなるのかな。

includeの代わりに
joinsを使うと:selectで指定した部分は動くらしい。こっちを検証してみるかな。