Как найти объект ActiveRecord, который имеет уникальные значения столбца по сравнению с другими близлежащими объектами - PullRequest
0 голосов
/ 08 мая 2019

У меня есть логический столбец с именем active в таблице с именем user.

Я пытаюсь найти users, где user до и после current_user не имеют одинакового значения в столбце active.

def has_unique_active_value
  user_ids_to_check = [self.id + 1, self.id - 1] # user.id before and after current_user
  if User.where(id: user_ids_to_check, active: self.active).present?
    return nil
  else
    return self
  end
end

current_user = User.all.first.has_unique_active_value

Выше должно возвращаться user, если значение столбца active отличается от user до и после. если нет, он должен вернуть nil

Будет ли более легкая или лучшая практика для достижения желаемого результата?

1 Ответ

0 голосов
/ 08 мая 2019

Увеличение / уменьшение значения self.id может быть неверным, поскольку этот пользователь может больше не существовать. Было бы лучше найти следующие / предыдущие идентификаторы. Вы можете найти предыдущую запись с помощью , выбрав максимальный идентификатор, меньший, чем self.id . Точно так же вы можете найти следующую запись , выбрав минимальный идентификатор больше, чем self.id .

def has_unique_active_value
  user_ids_to_check = [User.where("id < ?", self.id).maximum(:id), User.where("id > ?", self.id).minimum(:id)]
  User.where(id: user_ids_to_check, active: self.active).present? ? nil : self
end

current_user = User.all.first.has_unique_active_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...