Rails Active Record .paginate, получить первую страницу (строку), если указанная страница (строка) не существует в таблице базы данных - PullRequest
0 голосов
/ 17 июня 2019

В rails 4.2 я использую метод paginate для получения постраничных записей из БД.Я хочу получить первую страницу, если указанная страница отсутствует в базе данных.

Я использую следующие функциональные возможности активной записи для извлечения постраничных записей из базы данных.Таким образом, если номер страницы упоминается как 2 и в БД есть только одна строка, запрос возвращает ноль.

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

Я хочу получить первую запись, если указанная страница не существует в БД.Он извлекает первую запись, если params [: page] пуст, но если в базе данных нет указанной страницы, возвращается nill.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Хотя Мой ответ похож на тот, который написал Марк. Но я все еще разместил его, так как он будет выполнять дополнительный запрос, только если исходный запрос возвращает пустые записи.

@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 в область действия

0 голосов
/ 17 июня 2019

Я думаю, что это то, что вам нужно:

@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, а если этого не произойдет, ваше приложение вернетпервая страница результатов.Чтобы сделать его немного более читабельным:

@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
...