Fooモデルがid, title, bodyを持っているとする。idだけ使いたいときに、
foo=Foo.find(:all)
とすると、idしか使わないんだけどtitleとbodyもおまけで付いてくる。メモリとかもったいないので、
foo=Foo.find_by_sql("select id from foos")
とfind_by_sqlで直接SQLを書いてやるとidのみ持ってくる。ただしこの方法だとSQLを直書きする羽目になるわけで、せっかくのActiveRecordなのに、と少し嫌な感じ。なんかいい方法無いかな。あったような気もするんだけど見つからない。
また、条件に合致したレコードを全部消したい場合、
#2時間以上前に作られたfooを消す Foo.find(:all, :conditions => ["created_at<?", Time.now-2*3600]).each{|foo| foo.destroy }
とやるとレコードごとにdelete from~が走るわ最初に全部findされるわで無駄、遅いので、
ActiveRecord::Base.connection.execute("delete from foos where created_at <#{Time.now-2*3600}")
とするとクエリ一発で消えてくれる。ただし例によってSQL直接記述だからなんだかなあ。