Ruby on rails 4 如何在rails中使用will_paginate和ransack

Ruby on rails 4 如何在rails中使用will_paginate和ransack,ruby-on-rails-4,pagination,will-paginate,ransack,Ruby On Rails 4,Pagination,Will Paginate,Ransack,我正在使用ransack进行搜索,现在我想在rails应用程序中实现分页。所以我用的是will_paginate宝石。我面临的问题是,我不知道如何将分页放在当前控制器代码中,因为它已经基于查询获取了结果 这是我的控制器代码 def search if params[:search].present? && params[:search].strip != "" session[:loc_search] = params[:search] end arrResult = Arr

我正在使用ransack进行搜索,现在我想在rails应用程序中实现分页。所以我用的是will_paginate宝石。我面临的问题是,我不知道如何将分页放在当前控制器代码中,因为它已经基于查询获取了结果

这是我的控制器代码

def search
if params[:search].present? && params[:search].strip != ""
  session[:loc_search] = params[:search]
end
arrResult = Array.new
if session[:loc_search] && session[:loc_search] != ""
  @rooms_address = Room.where(active: true).near(session[:loc_search], 5, order: 'distance')
else
  @rooms_address = Room.where(active: true).all
end

@search = @rooms_address.ransack(params[:q])
@rooms = @search.result

@arrRooms = @rooms.to_a
有人能告诉我怎么在这里分页吗

使用日志更新

18:29:40 web.1    |   Room Load (0.8ms)  SELECT  rooms.*, 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((12.9715987 - rooms.latitude) * PI() / 180 / 2), 2) + COS(12.9715987 * PI() / 180) * COS(rooms.latitude * PI() / 180) * POWER(SIN((77.5945627 - rooms.longitude) * PI() / 180 / 2), 2))) AS distance, MOD(CAST((ATAN2( ((rooms.longitude - 77.5945627) / 57.2957795), ((rooms.latitude - 12.9715987) / 57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing FROM "rooms" WHERE "rooms"."active" = $1 AND (rooms.latitude BETWEEN 12.754501025333727 AND 13.188696374666272 AND rooms.longitude BETWEEN 77.37177993269385 AND 77.81734546730614 AND (3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((12.9715987 - rooms.latitude) * PI() / 180 / 2), 2) + COS(12.9715987 * PI() / 180) * COS(rooms.latitude * PI() / 180) * POWER(SIN((77.5945627 - rooms.longitude) * PI() / 180 / 2), 2)))) BETWEEN 0.0 AND 15)  ORDER BY distance LIMIT 5 OFFSET 5  [["active", "t"]]
18:29:40 web.1    |    (0.3ms)  SELECT COUNT(*) FROM "rooms" WHERE "rooms"."active" = $1 AND (rooms.latitude BETWEEN 12.754501025333727 AND 13.188696374666272 AND rooms.longitude BETWEEN 77.37177993269385 AND 77.81734546730614 AND (3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((12.9715987 - rooms.latitude) * PI() / 180 / 2), 2) + COS(12.9715987 * PI() / 180) * COS(rooms.latitude * PI() / 180) * POWER(SIN((77.5945627 - rooms.longitude) * PI() / 180 / 2), 2)))) BETWEEN 0.0 AND 15)  [["active", "t"]]

您对搜索结果进行分页,因此在
搜索后

类似于
@rooms=@search.result.paginate(page:params[:page],per_page:params[:per_page])
的东西应该可以用。

谢谢,它可以用。。但是先分页或者。。。在这种情况下,这是最好的方法吗?不是真的-ransack也可以进行排序,而不仅仅是搜索,而且您通常不希望只对当前页面的结果进行排序。那么在使用ransack时使用willpaginate是否有过大的杀伤力呢?两者都有各自的用途,它们确实是不同的东西-
ransack
用于搜索/排序,
将分页
以成批分割结果。分页就是这样做的-如果您查看它生成的SQL,它会使用
限制
偏移量
进行分页,因此即使您有100条匹配记录,实际上也只能从数据库中获取一页结果(在您的案例中为5条记录)。