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

时间:2016-05-10 03:59:50

标签: 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))

我知道上面的内容不正确,但希望有人可以通过更简单的方式来启发我查找此查询的事件...提前致谢!

3 个答案:

答案 0 :(得分:1)

我们可以在下周末找到end time# 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

顺便说一句,UPDATE s SET s.Credits = s.Credits-3 FROM Student s JOIN deleted d ON s.stuID = d.stuID 可能是一种不正确的方法,所以用上述逻辑找周末时间更准确!

答案 1 :(得分:1)

如果我尝试将您的问题翻译成算法,我认为您所追求的是:查找在即将到来的周末期间或之前具有start_date 的所有事件(即之前)周末结束时 {/ 1}} 即将到来的周末期间(即周末开始之​​后)。这样我们就可以查找至少部分涵盖周末日的事件

如果你在星期四运行你的佣金,那么可以检索下一个周末:

end_date

有了这个,查询很简单:

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) start_date列不是DATE而是DATETIME列,则必须定义周末的开始和结束,如下所示:

end_date

定义使用weekend_start = Time.zone.now.end_of_week.midnight - 1.day # 00:00 at Saturday weekend_end = Time.zone.now.end_of_week # 23:59 at Sunday 来计算当地时区的时间。

答案 2 :(得分:0)

试试这个

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