我有4个日期参数event_start, event_end, view_start, view_end
如何编写Model.where()(或相应的活动记录查询语法),以便IF event_start
和event_end
之间的任何日期与中间的任何日期相同view_start
和view_end
然后包含该记录?
event_start
和event_end
是我的表格中的列(模型上的属性)。
view_start
和view_end
在params哈希中可用。
答案 0 :(得分:2)
只有两种情况不显示记录:当view_start
大于event_end
且view_end
小于event_start
时。 (假设查看日期的顺序正确)。因为我们正在寻找对此的否定,使用德摩根定律:
if view_start < view_end
Model.where('event_start < ? AND event_end > ?', view_end, view_start)
else
Model.none
答案 1 :(得分:1)
试试这个:
Model.
where(Model.arel_table[:event_start].lt(params[:view_end])).
where(Model.arel_table[:event_end].gt(params[:view_start]))
将找到重叠的范围。根据您的应用程序处理端点的小时数,您可能需要将这些更改为例如gteq
。