Как увеличить записи, когда номер строки и идентификатор не синхронизированы? - PullRequest
0 голосов
/ 12 марта 2011

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

Итак, как начать с заданной записи и эффективно перейти к следующей записи?

Если вы используете идентификатор записи, вы можете попасть в идентификатор, который был удален.
Если вы используете что-то вроде User.first (: offset => user_id), то вы можете пропустить некоторые записи. поскольку в данной записи user_id может быть больше номера строки (в результате удаления предыдущей записи).

Единственное решение, которое я нашел, - увеличивать все записи каждый раз, но это кажется очень неэффективным:

user_id = params[:id].to_i
users = User.all
next_user = nil
next_cond = false
users.each do |u|
  if u.id == user_id
    next_cond = true
  elsif next_cond
    next_user = a
    break
  end
end

Итак, как эффективно получить следующую запись? Есть ли способ, например, получить номер строки данной записи?

Примечание: я использую SQLite локально, а MySQL на сервере.

Ответы [ 2 ]

2 голосов
/ 12 марта 2011
User.where("id > ?", user_id).order("id ASC").first
0 голосов
/ 12 марта 2011

Похоже, вы хотите решение для нумерации страниц.

will_paginate - лучшее решение, с которым я знаком, но оно довольно старое, и я давно не проверял, есть ли лучшее решение.

http://railscasts.com/episodes/51-will-paginate

...