Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中查找重叠范围的记录_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 在Rails中查找重叠范围的记录

Ruby on rails 在Rails中查找重叠范围的记录,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,因此,我有一个事件模型,它有一个在处开始,一个在列处结束,我想查找在一系列日期内发生的事件 我想出了这个命名的_scope(范围通常是一个月): 这和预期的一样 但是如果某个事件在之前的一个月开始,而在该范围之后的一个月结束,则该事件不会显示。有没有办法以适当的方式找到这些事件?我想如果事件在范围结束之前开始,在范围开始之后结束,那么它就会重叠。:) 因此: {:conditions=>['?start_at',range.first,range.last]} 有四种情况: Start

因此,我有一个
事件
模型,它有一个
处开始,一个
列处结束,我想查找在一系列日期内发生的事件

我想出了这个
命名的_scope
范围
通常是一个月):

这和预期的一样


但是如果某个事件在之前的一个月开始,而在该范围之后的一个月结束,则该事件不会显示。有没有办法以适当的方式找到这些事件?

我想如果事件在范围结束之前开始,在范围开始之后结束,那么它就会重叠。:)

因此:

{:conditions=>['?start_at',range.first,range.last]}
有四种情况:

     Start    End
1.      |-----|
2.  |------|
3.  |-------------|
4.         |------|
您的命名_范围仅获取案例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.first, range.last, range.first, range.last, range.first, range.last
   ]}
}
命名的_范围:在_范围内,lambda{124;范围|
{:条件=>[
“(开始于?和?之间或结束于?和?之间)或(开始于=?)”,
range.first,range.last,range.first,range.last,range.first,range.last
]}
}

太好了!图也不错:)
     Start    End
1.      |-----|
2.  |------|
3.  |-------------|
4.         |------|
named_scope :in_range, lambda { |range|
  {:conditions => [
     '(starts_at BETWEEN ? AND ? OR ends_at BETWEEN ? AND ?) OR (starts_at <= ? AND ends_at >= ?)',
     range.first, range.last, range.first, range.last, range.first, range.last
   ]}
}