`PG::NumericValueOutOfRange` 当调用 `.page(num)` 并传入非常大的页号时
作者: jrdufresne创建于 2026年9月1日更新于 2026年9月1日
描述
.page(num) 计算偏移量,没有上限:
# 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