【发布时间】:2015-08-02 04:19:38
【问题描述】:
我正在寻找具有以下特点的预约应用程序: - 用户可以是服务提供者或购买者 - 服务提供商设置他们的可用性(但只能将他们的可用性设置为最多提前 6 个月) - 然后,买家可以根据这些可用性进行预约 - 每个预约,根据服务类型,需要不同的时间 - 根据买家选择的预约,根据服务所需的时间显示一组不同的可用性
我构建的内容如下:
- 一个TimeSlot 模型,我基于start_time 和end_time 属性创建了许多通用的30 分钟时间段。为了使这些时间段延长到未来 6 个月,我每天运行一个后台作业,创建所有必要的新时间段
class TimeSlot < ActiveRecord::Base
has_many :user_time_slots
# ... more methods below
end
- 一个UserTimeSlots 模型,基本上代表他们可以设置的服务提供商的可用性。所以当他们创建一个 user_time_slot 时,他们本质上是在说他们当时可用。
class UserTimeSlot < ActiveRecord::Base
belongs_to :time_slot
belongs_to :service_provider, :class_name => "User"
belongs_to :appointment
end
- 一个Appointment 模型,它有很多 user_time_slots。它有很多,因为约会属于需要一定时间的服务(服务上的time_required 属性)并且它可能跨越多个连续 user_time_slots。
class Appointment < ActiveRecord::Base
has_many :user_time_slots
belongs_to :buyer, :class_name => "User"
belongs_to :service_provider, :class_name => "User"
belongs_to :service
end
- 一个Service 模型,它有许多约会并且属于创建该服务的服务提供商。
class Service < ActiveRecord::Base
has_many :appointments
belongs_to :service_provider, :class_name => "User"
end
此领域模型有效;但是,由于以下原因,我想知道是否有更好的方法:
-
每天使用后台作业在我的后端创建 TimeSlot 记录对我来说似乎有点笨拙 - TimeSlot 的唯一目的是拥有开始和结束时间,然后与之关联。
- 一旦用户(买方)选择了他们想要的服务,我不确定如何有效地找到 x 个连续的 user_time_slots,因此可用于预约(例如,如果我有 30 分钟时隙间隔和用户选择需要 3 小时的约会,我必须找到 6 个连续的时隙)。例如,如果用户单击服务实例,我将不得不 1) 获得该服务所需的时间(很容易做到)和 2) 我必须找到所有用户的 user_time_slots 并收集他们的关联time_slots,然后将每个时间槽的开始和结束时间相互比较以找到连续的时间。对我来说,这似乎是太多的迭代,这似乎会使我的应用程序陷入困境!
有没有人有更好的方法或解决方案来做到这一点(特别是围绕寻找连续时隙的主题)?
【问题讨论】:
-
您在这里想到什么样的“可信和/或官方来源”?
-
真的只是在这里寻找一个深思熟虑的解决方案 - 不需要真正的官方资格
标签: ruby-on-rails domain-model appointment timeslots