Rails Active Record .paginate,获取第一页(行),如果指定的页面(行)在数据库中不存在 table

Rails Active Record .paginate, Get First page(row), if page (row) specified doesn't exist in database table

在 rails 4.2 中,我使用 paginate 方法从数据库中获取分页记录。如果数据库中不存在指定页面,我想获取第一页。

我正在使用以下活动记录功能从数据库中获取分页记录。所以如果提到页码 2 并且数据库中只有一行,则查询 returns 为空。

@records = @user.where("some where clause here").paginate(per_page: 1, page: params[:page].presence || 1).

如果数据库中不存在指定的页面,我想获取第一条记录。它获取第一条记录,如果 params[:page] 为空,但如果数据库没有指定的页面,它 returns nill.

我想这就是你需要的:

@records = @user.where(title: 'bla').paginate(per_page: 1, page: params[:page].presence || 1).

@results = @records.empty? ? @user.where(title: 'bla').paginate(per_page: 1, page: 1) : @records

这意味着如果您的@records 实例变量有任何记录,它将在@results 中return编辑,如果没有,您的应用程序将return 结果的第一页。为了使其更具可读性:

@first_page_records = @user.where(title: 'bla').paginate(per_page: 1, page: 1)
@custom_page_records = @user.where(title: 'bla').paginate(per_page: 1, page: params[:page].presence || 1)

@results = @custom_page_records.empty? ? @first_page_records : @custom_page_records

尽管我的回答与 Mark 发布的类似。但我还是发布了它,因为只有当原始查询 returns 为空记录时,它才会 运行 一个额外的查询。

@records = @users.valid_users_with_invalid_msg.paginate(per_page: 1, page: params[:page].presence || 1)

if @records.empty?
  @records = @users.valid_users_with_invalid_msg.paginate(per_page: 1, page:  1)
end

注意:我已将 where 子句移至范围