【问题标题】:Search free term in RoR在 RoR 中搜索免费术语
【发布时间】:2018-03-05 06:42:38
【问题描述】:
我正在寻找一种编写查询的方法,该查询将查找免费会议室的日期。
我有两张桌子:
带有会议室名称的表格和
预订表由两个字段组成:开始日期 [date_from] 和结束日期 [date_end]
寻找会议室的新客户首先在搜索引擎中输入租用房间的日期和结束日期。如何搜索注册表以考虑这些天之间的预订天数并仅显示那些空闲的会议室。
比如1号房的时间安排是2018年3月6日-2018年3月8日,2号房是2018年3月4日-2018年3月7日。我在找2018 年 3 月 8 日至 2018 年 3 月 9 日的房间
你有什么建议?
【问题讨论】:
标签:
ruby-on-rails
activerecord
【解决方案1】:
假设模型名称为 ConferenceRoom 和 ConferenceBooking,因此相应的表将类似于 Conference_rooms 和 Conference_bookings。
一旦提供了 date_from 和 date_end 参数,查询将如下所示
ConferenceRoom.
left_joins(:conference_bookings).
where(
"conference_bookings.date_from > ? OR
conference_bookings.date_end < ?", date_end, date_from
)
预订结束日期小于提供的date_from值的会议室和预订开始日期大于提供的date_end值的会议室的查询获取结果。
【解决方案2】:
首先获取在日期范围内预订的房间的所有 id。
ids = Booking.where("date_from <= ? AND date_end >= ?", date_end, date_from).pluck(:room_id)
所有其他房间都是免费的:
free_rooms = Room.where.not(id: ids)