読者です 読者をやめる 読者になる 読者になる

in (?)を使わないでなんとかする

Rails Ruby

私はSQL脳じゃなくてRails脳なので、
in (?)なんぞを使わないでなんとかしたくなる。
んで、オレだったらこうするよなぁってヤツを公開。
元のクエリ

User.find(:all,:include=>[:user_schedules],:conditions=>["user_schedules.schedule_id in (?)",@event.schedule_ids])

なげーよ。でも、処理は速そうだな。

@event.schedules.inject([]){|result,schedule|result+schedule.users}.uniq

短いけど、遅そうだな。
ベンチマークをとってみよう。

fujioka@macbook:~/rails/adjuster% ./script/performance/benchmarker 1000 'User.find(:all,:include=>[:user_schedules,:schedules],:conditions=>["user_schedules.schedule_id in (?)",Event.find(:first).schedule_ids])'
            user     system      total        real
#1      3.350000   0.130000   3.480000 (  4.754344)
fujioka@macbook:~/rails/adjuster% ./script/performance/benchmarker 1000 'Event.find(:first).schedules.inject([]){|result,schedule|result+schedule.users}.uniq'
            user     system      total        real
#1      1.510000   0.140000   1.650000 (  2.492594)

あれ???うーむ。
1000回とかやってもRailsがキャッシュしてしまうとか?