ActiveRecordで遅く検索する(メタボプログラミング)

渡された複数のidで検索する必要がある時、

  @users = User.find(params[:ids].split(/,/))

で検索しちゃ駄目だよ!早くなっちゃうからね!

  @users = []
  params[:ids].split(/,/).each do |id|
    @users << User.find(id)
  end

って検索しようね!idの数だけ検索して、100パラメータ渡す様な奴だと、
信じられない速度さが出てくれるからね!


Userテーブルに関連するDiaryテーブルを検索する時も
modelにhas_manyやbelongs_toを定義して

  @user = User.find(:all, :include => :diaries)

って一度に取って来ちゃ駄目だよ!SQLがまとまっちゃう!

  @diaries
  @user = User.find(:all)
  @user.each do | user |
    @diaries << [user, Diary.find(:all, :conditions => ["user_id = ?", user.id]) ]
  end

って取ってくるとSQLがいっぱい発行されて重く出来るよ!
ちゃんとuserとセットにしてるので、これはどのユーザーのデータか後で操作も出来るんだ!
koolだね!


これが今話題のメタボプログラミングだよ!
今考えた単語だけど!