微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 查找与Rails中的范围重叠的记录

所以,我有一个事件模型有一个starts_at和ends_at列,我想查找发生在一系列日期的事件.

我想出了这个named_scope(范围通常是一个月):

named_scope :in_range,lambda { |range|
  {:conditions => [
    'starts_at BETWEEN ? AND ? OR ends_at BETWEEN ? AND ?',range.first,range.last,range.last]} }

哪些工作如预期.

但是,如果一个事件从前一个月开始,并在该范围之后的月份结束,则不会显示.有没有办法以正确的方式找到这些事件?

解决方法

有四种情况:
Start    End
1.      |-----|
2.  |------|
3.  |-------------|
4.         |------|

你的named_scope只会得到1,2和4的情况.所以你只需要添加

named_scope :in_range,lambda { |range|
  {:conditions => [
     '(starts_at BETWEEN ? AND ? OR ends_at BETWEEN ? AND ?) OR (starts_at <= ? AND ends_at >= ?)',range.last
   ]}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐