【问题标题】:Recurring database entries重复的数据库条目
【发布时间】:2017-05-08 09:11:42
【问题描述】:

关于重复数据库条目的快速问题。

假设我有用户在平台上发布他们的旅行。现在,用户可以说这些旅行是重复的 - 她/他每周二和周四都会进行该旅行。

为了让事情变得更有趣,假设每个旅行都附有请求,其他用户可以提出。他们可以为每次重复旅行提出这些请求。

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

提前致谢!

【问题讨论】:

  • 我会建立一个新的模型,称为循环或任何你想称之为的,belongs_to the Trip,如果一个旅行是循环的,你使用这个新模型来建立循环。至于请求 - 您可以通过关系创建一个 has_many 可能使其工作。我们真正需要看到的是您已经拥有的旅行和请求以及您为重复尝试而尝试的内容。 (不过,我非常喜欢标准化,您可以在简单的行程表中进行重复,但在您的示例中,您需要两次“重复”,除非您知道一种方法可以让一个属性选择两天)

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


【解决方案1】:
User
  has_many :trips

Trip
  belongs_to :user
  has_many :requests

Request
  belongs_to :user
  belongs_to :trip

Trip 上添加recurring_startrecurring_end 属性,也许在Request 上添加recur 属性。我不知道您需要为每次旅行创建任何其他记录,是吗?

如果是这样,您希望您的业务逻辑处理它。像 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 之类的内容。

【讨论】:

  • 如果重复发生在他的示例中,这是否有效,就像他的例子一样,在每个星期二和星期四?对我来说,本能是一个相关的模型,以允许重复出现最大的灵活性,但也许我过度规范化了?
  • @MageeWorld 取决于该逻辑是如何实现的,以及这些记录如何在应用程序中使用。假设您的 request 类似于通知,则查询可以轻松提取所有符合时间条件的有效 gis 绑定行程,然后将通知推送到所需的渠道,而无需创建单独的记录。
  • @coreyward 这看起来是合法的,谢谢你的提示。支持您的答案,直到我有时间对此进行测试。很快。 ;)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 2021-12-23
    • 2013-12-15
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多