列出特定日期的可用用户
我正在寻找预订系统,我需要在特定的日期/时间显示所有可用的用户。
考虑一下,我打算建立一个表格来记录人们何时不可用,并假设它们是可用的。 我想到的结构是记录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上。
- 为什么Rails使用带有范围的where子句哈希语法向查询添加“OR 1 = 0”?
- 在为Ruby on Rails应用程序设置mysql数据库时出现“无法通过socket连接到本地MySQL服务器’/var/run/mysqld/mysqld.sock’”错误
- 将保存/更新调用rails转换为sql
- 乘客错误“库未加载”
- Mysql2 ::错误:您的SQL语法中有错误
- 我怎样才能修改我的MySQL密码,以便我可以在db上创建db:create?
- Rails和MySQL语法错误与执行块中的多个SQL语句
- Ruby on Rails安装问题 – 如何使用WAMP MySQL安装?
- Mysql2 ::错误:访问被拒绝用户’test’@’localhost’到数据库’depot_test’