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
]}
}