will_paginate
結果が nil の場合、検索結果を処理しようとすると、gem から例外が発生します。
コードは次のとおりです。
@posts = Post.search(query).paginate(:page => params[:page], :per_page => 8)
そのため、if ステートメントを追加して、paginate が nil で呼び出されないようにするのは簡単です。
if !Post.search(query).nil?
@posts = Post.search(query).paginate(:page => params[:page], :per_page => 8)
end
しかし、私の Post.search(query) が 500,000 件の投稿を返すと想像してください。
Will_paginate はLIMIT
、SQL クエリに a を怠惰な方法で追加するほどスマートなので、データベースが 500,000 をすべて消費する必要はありません (この場合、一度に 1 ページあたり 8 つだけです)。
私の懸念は、Post.search(query).nil?
この LIMIT が適用されていないため、クエリが nil であるかどうかを判断するためだけに、500,000 件の投稿すべてを返す可能性があることです! それはクレイジーに思えます。
500,000 件の結果全体を照会するという懸念以外に、ここで行っている方法のもう 1 つの欠点は、2 つの別個のPost.search
要求が必要になることです。
paginate was called on nill
必要以上にデータベースにアクセスすることなく、これらのエラーを回避できるようにするためのより適切な方法はありますか?