posts_controller.rb
@total_count = Post.count # hit db
@posts = Post.paginate(page: params[:page]) # hit db twice
其实分页后的对象已经包含 total count 的信息了,没有必要再查一次数据库。直接使用 ** total_entries** 方法既可
pry(main)> posts = Post.desc(:id).paginate(page: 1)
pry(main)> posts.class
=> WillPaginate::Collection
pry(main)> posts.instance_variables
=> [:@current_page, :@per_page, :@total_entries]
pry(main)> posts.instance_eval {p @total_entries}
=> 3237
posts_controller.rb
@posts = Post.desc(:id).paginate(page: params[:page]) # hit db twice
@total_count = @post.total_entries # 其实直接在 view 中调用就 ok 了
我后知后觉,今天才发现这个方法。