列出特定日期的可用用户

我正在寻找预订系统,我需要在特定的日期/时间显示所有可用的用户。

考虑一下,我打算建立一个表格来记录人们何时不可用,并假设它们是可用的。 我想到的结构是记录date_start何时不可用,然后是date_end。

现在问题出现在我正在尝试预订会议时,如果我想在星期二11:00到13:00预订一些东西我需要获取那些可用的人员列表,即没有任何人在那段时间预订的假期。

任何想法或想法? 如果这有助于/阻碍任何人的想法,我将使用Ruby on Rails。

这是建模它的一种方法。 假设我们有一个模型’Engagement’,它有一个开始日期时间,结束日期时间和名称。 通过另一个名为“user_engagements”的连接表(具有相应的UserEngagement模型),订阅有许多用户。 所以我们有

User has_many :user_engagements has_many :engagements, :through => :user_engagements Engagement #fields - starts_at, ends_at (both datetime) has_many :user_engagements has_many :users, :through => :user_engagements UserEngagement belongs_to :user belongs_to :engagement 

现在我们有一个很好的简单模式。 参与基本上模拟正在发生的事情,而user_engagements模拟被预定做这件事的用户。 我们有一个假设(没有写入代码),当他们做某事时,他们无法做任何其他事情。

我们的下一个任务是编写一个方法,返回给定时间段内可用的用户,即新的参与。 因此,我们进行了互动,并且我们希望所有没有参与的用户与我们的新订婚交叉。 我认为最简单的方法可能是找到所有具有交叉参与度的用户,然后返回所有不是他们的用户。 如果你明白我的意思。 说e2与e1交叉的更精确的方式是e2在e1结束之前开始并且在e1开始之后结束。

让我们把它作为一个参与对象的方法,因为它完全依赖于订婚的数据。

 #in Engagement def unavailable_user_ids User.find(:all, :include => [:user_engagements], :select => "users.id", :conditions => ["user_engagements.starts_at < ? and user_engagements.ends_at > ?", self.ends_at, self.starts_at]).collect(&:id) end def available_users User.find(:all, :conditions => ["id not in (?)", self.unavailable_user_ids]) end 

我觉得有一种更有效的方法可以在一个查询中得到这个,但我不能完全把手指放在sql上。