#1154·kaminari

`PG::NumericValueOutOfRange` 当调用 `.page(num)` 并传入非常大的页号时

作者: jrdufresne创建于 2026年9月1日更新于 2026年9月1日

描述

.page(num) 计算偏移量,没有上限:

ruby
# kaminari-activerecord/lib/kaminari/activerecord/active_record_model_extension.rb
def self.page(num = nil)
  per_page = max_per_page && (default_per_page > max_per_page) ? max_per_page : default_per_page
  limit(per_page).offset(per_page * ((num = num.to_i - 1) < 0 ? 0 : num)).extending do
    ...
  end
end

如果 num 足够大,它将超出 PostgreSQL 的 bigint 范围(最大为 9223372036854775807)。这通常是由用户输入的查询参数(例如 ?page=)驱动的。这将表现为未处理的 500。

内容来源: kaminari/kaminari