如何在 rails 中使用 will_paginate 和 ransack
how to use will_paginate with ransack in rails
我正在使用 ransack 进行搜索,现在我想在我的 rails 应用程序中实现分页。所以我用的是will_paginategem。我面临的问题是我无法弄清楚如何将分页放入我当前的控制器代码中,因为它已经根据查询获取结果。
这是我的控制器代码
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" = 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" = 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"]]
您对搜索结果进行了分页,所以在 ransack
之后。
@rooms = @search.result.paginate(page: params[:page], per_page: params[:per_page])
之类的东西应该可以。
我正在使用 ransack 进行搜索,现在我想在我的 rails 应用程序中实现分页。所以我用的是will_paginategem。我面临的问题是我无法弄清楚如何将分页放入我当前的控制器代码中,因为它已经根据查询获取结果。
这是我的控制器代码
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" = 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" = 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"]]
您对搜索结果进行了分页,所以在 ransack
之后。
@rooms = @search.result.paginate(page: params[:page], per_page: params[:per_page])
之类的东西应该可以。