重复的数据库条目

时间:2016-12-22 17:01:53

标签: ruby-on-rails postgresql recurring-events

有关重复出现的数据库条目的快速提问。

假设我有用户在平台上发布他们的旅行。现在,用户可以说这些旅行经常发生 - 她/他每周二和周四都会去旅行。

为了让事情变得更有趣,请说每个Trip都有附加的请求,其他用户可以制作。他们可以为每次重复的旅行提出这些要求。

关于如何在后端处理这样一个案例的任何想法?使用Rails和Postgres。

提前致谢!

2 个答案:

答案 0 :(得分:1)

User
  has_many :trips

Trip
  belongs_to :user
  has_many :requests

Request
  belongs_to :user
  belongs_to :trip

recurring_start上添加recurring_endTrip属性,在recur上添加Request属性。我不知道你需要为每次旅行创建任何额外的记录,对吗?

如果是这样,您希望您的业务逻辑处理它。类似Sidekiq的东西,带有一个Query对象,用于获取将要重复出现的Trips,并创建新的旅程(例如)更新的开始和结束日期......

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

如果您想自动克隆/复制相关记录,也可以使用DeepCloneable之类的内容。

答案 1 :(得分:0)

由于每次旅行都有不同的请求,因此他们都需要自己的个人身份证。除了一种情况之外,将它们视为与非经常性旅行完全相同是有意义的:当旅行的创建者想要编辑或删除重复旅行的所有实例时。为此,您可能需要为重复出行制作一个附加表,其中包括从重复行程ID到行程ID的一对多关系,并允许用户拥有定期行程ID以及行程ID。这样,用户界面可以逻辑显示两种,并且不会丢失。

只需确保无论何时编辑或删除行程,都会更新定期行程表。这可以通过简单地禁止编辑或删除作为定期旅行的一部分的旅行来实现,或者使旅行表存储可选的重复旅行ID。