RubyOnRailsでfindする時、conditionsにArrayを渡すメモ

RubyOnRailsでfindするSQLを組み立てる際、複数の自動生成されるキーをconditionsに渡そうとして詰まったのでメモ書き。
最終的に作りたいfind文は以下。

User.find( :all, conditions => [ 'id IN ( ?, ?, ?, ?, ? )', 2, 4, 5, 8, 9 ] )

ユーザからのリクエストで、以下のようなid郡を配列で受けてます。
idは実際は特殊なもので、エスケープの必要な文字を含んでいる状態。
なので、?で置き換えて処理してもらいたい感じ。

id = [ 2, 4, 5, 8, 9 ]

これをうまくconditionsに当てはめたい。
結果できたスパゲッティーは以下。

if ( id.size != 0 ) then
  rep_ar = []
  # idの件数分'?'を追加
  for i in 0..( ( id.size ) -1 )
    rep_ar << '?'
  end
  User.find( :all, conditions => ["id IN ( #{rep_ar.join( ',' )} )", *id] ).each do |h|
    p h[:id]
  end

ミソだったのは*(アスタリスク)!
まさかこんな便利だったとは。
呼び出し側のアスタリスクは配列を展開しますが、受け取り側のアスタリスクは残りの引数を配列化してくれるそうな。
あやうくスパゲッティーを超えて、乾燥しはじめたソウメンになるところでした。