Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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,ActiveRecord,查找周末发生的所有事件_Ruby On Rails_Ruby On Rails 4_Activerecord_Find_Where - Fatal编程技术网

Ruby on rails Rails,ActiveRecord,查找周末发生的所有事件

Ruby on rails Rails,ActiveRecord,查找周末发生的所有事件,ruby-on-rails,ruby-on-rails-4,activerecord,find,where,Ruby On Rails,Ruby On Rails 4,Activerecord,Find,Where,我想知道是否有人可以帮助处理这个ActiveRecord查询。我有一些活动有开始和结束日期。我想运行一个cron作业,在下一个周末的每个星期四获取所有事件 类似于 @events = Event.where("start_date <= ?", (Date.today + 3.days)).where("end_date >= ?", (Date.today + 3.days)) @events=Event.where(“开始日期=?”,(date.today+3.days))

我想知道是否有人可以帮助处理这个ActiveRecord查询。我有一些活动有开始和结束日期。我想运行一个cron作业,在下一个周末的每个星期四获取所有事件

类似于

@events = Event.where("start_date <= ?", (Date.today + 3.days)).where("end_date >= ?", (Date.today + 3.days))
@events=Event.where(“开始日期=?”,(date.today+3.days))

我知道上面的说法是不正确的,但希望有人能给我一个更简单的方法来找到这个查询的事件。。。提前谢谢

我们可以找到下周末的
开始时间
结束时间
,这样之后查询就很容易了

# Start weekends time
start_next_saturday = Date.today.end_of_week.at_beginning_of_day - 1.days
# End weekends time
end_next_sunday     = Date.today.end_of_week.at_end_of_day

arel_table = Event.arel_table
@events    = Event.where(arel_table[:start_date].lteq(end_next_sunday)
                          .and(arel_table[:end_date].gteq(start_next_saturday)))

顺便说一句,
Date.today+3.days
可能是一种不正确的方法,因此使用上述逻辑查找周末时间更准确

我们可以找到下周末的
开始时间
结束时间
,这样之后查询就很容易了

# Start weekends time
start_next_saturday = Date.today.end_of_week.at_beginning_of_day - 1.days
# End weekends time
end_next_sunday     = Date.today.end_of_week.at_end_of_day

arel_table = Event.arel_table
@events    = Event.where(arel_table[:start_date].lteq(end_next_sunday)
                          .and(arel_table[:end_date].gteq(start_next_saturday)))
顺便说一句,
Date.today+3.days
可能是一种不正确的方法,因此使用上述逻辑查找周末时间更准确

试试这个

Event.where(created_at: (Date.today.end_of_week-1..Date.today.end_of_week))
试试这个

Event.where(created_at: (Date.today.end_of_week-1..Date.today.end_of_week))

如果我试图将你的问题转化为一个算法,我认为你所追求的是:在下一个周末期间或之前(即周末结束之前)查找所有具有
开始日期
的事件,以及在下一个周末期间或之后(即周末开始之后)具有
结束日期
的事件。这样,我们将找到至少部分涵盖周末的活动

如果您在周四运行rake,则下一个周末可以如下方式检索:

weekend_start = Date.today.end_of_week - 1    # the Saturday's date
weekend_end   = Date.today.end_of_week        # the Sunday's date
这样,查询就很容易了:

@events = Event.where("start_date <= ? AND end_date >= ?", weekend_end, weekend_start)

定义使用
时区
计算本地时区的时间。

如果我试图将您的问题转化为算法,我认为您的目的是:在下一个周末期间或之前(即周末结束之前),查找所有具有
开始日期的事件以及下一个周末期间或之后(即周末开始后)的结束日期。这样,我们将找到至少部分涵盖周末的活动

如果您在周四运行rake,则下一个周末可以如下方式检索:

weekend_start = Date.today.end_of_week - 1    # the Saturday's date
weekend_end   = Date.today.end_of_week        # the Sunday's date
这样,查询就很容易了:

@events = Event.where("start_date <= ? AND end_date >= ?", weekend_end, weekend_start)

定义使用
Time.zone
来计算本地时区中的时间。

这将查找上周末的事件,而OP希望下一个周末。为什么是阿雷尔?啊哈,谢谢你的建议,这只是制作QueryTanks HieuPham的一个选择!您的解决方案是可行的,但由于简单,使用了硼砂。感谢您的时间此功能查找上周末的事件,而OP希望在下一个周末进行。为什么是阿雷尔?啊哈,谢谢你的建议,这只是制作QueryTanks HieuPham的一个选择!您的解决方案是可行的,但由于简单,使用了硼砂。谢谢你的时间谢谢大家的建议!为了简单易懂,我使用了@BoraMa solution。清除并获得正确的查询!谢谢!=)谢谢大家的建议!为了简单易懂,我使用了@BoraMa solution。清除并获得正确的查询!谢谢!=)