Повторяющиеся записи базы данных

Быстрый вопрос о повторяющихся записях в БД.

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

Чтобы было еще интереснее, скажите, что к каждой поездке прикреплены запросы, которые могут делать другие пользователи. И они могут сделать эти Запросы для каждой повторяющейся поездки.

Любые идеи о том, как бы я справился с делом, как этот на заднем плане? Использование Rails и Postgres.

Заранее спасибо!

2 ответа

User
  has_many :trips

Trip
  belongs_to :user
  has_many :requests

Request
  belongs_to :user
  belongs_to :trip

добавлять recurring_start а также recurring_end атрибуты на Tripи, возможно, recur атрибут на Request, Я не знаю, что вам нужно создавать какие-либо дополнительные записи для каждой поездки, не так ли?

Если это так, вы хотите, чтобы ваша бизнес-логика справилась с этим. Что-то вроде Sidekiq с объектом Query, который выбирает поездки, которые должны быть повторены, и создает новую поездку с (например) обновленными датами начала и окончания…

class Trip < ApplicationModel
  scope :recurring, -> { where(recur: true) }
  scope :due_for_recurrence, -> { recurring.where(Trip.arel_table[:end_date].lt(Time.now)) }
end

Вы можете использовать что-то вроде DeepCloneable, если вы хотите автоматически клонировать / дублировать связанные записи.

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

Просто убедитесь, что каждый раз, когда поездка редактируется или удаляется, таблица повторяющихся поездок обновляется. Этого можно достичь, просто запретив редактирование или удаление поездок, являющихся частью повторяющейся поездки, или сделав в таблице поездок необязательный идентификатор повторяющейся поездки.

Другие вопросы по тегам