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だね!
これが今話題のメタボプログラミングだよ!
今考えた単語だけど!