will_paginate
如果结果恰好为零,则在尝试处理搜索结果时,我会看到 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
一种惰性的方式将 a 附加到 SQL 查询中,这样数据库就不必咳出所有 500,000 个(在这种情况下,每次每页只有 8 个)。
我担心的是它Post.search(query).nil?
没有应用这个 LIMIT,所以它可能会返回所有 500,000 个帖子,只是为了确定查询是否为零!这似乎很疯狂。
除了对查询全部 500,000 个结果的担忧之外,我在这里这样做的另一个缺点是它涉及两个单独的Post.search
请求。
有没有更优雅的方法来确保我可以避免这些paginate was called on nill
错误,而不会超过我需要的数据库?