Ruby on Rails:查询日期等于另一个日期(忽略时间)

5 ruby sql ruby-on-rails date

我正在尝试在我的模型上执行此查询,但我无法弄明白.

  • 活动有一个日期.
  • 我有一个名为"array_of_dates"的日期数组,我是从另一个模型构建的:

    array_of_dates = []
    user.each do |user|
       array_of_dates << user.birthday_date
    end
    
    Run Code Online (Sandbox Code Playgroud)
  • user.birthday_date当然是一个日期时间

我试过了

Event.where("date in (?)", array_of_dates)
Run Code Online (Sandbox Code Playgroud)

但是,来自Event的日期也有一个时间设置.我想忽略这里设定的时间,因为我只是在寻找这一天.我尝试将user.birthday_date解析为另一种格式,但我不知道如何从Event模型更改"date"的格式.

谢谢您的帮助!

Ale*_*mes 5

使用日期功能:

# if user's birthday_date column is date
Event.where("date(date) in (?)", User.pluck(:birthday_date))

# if user's birthday_date column is timestamp
Event.where("date(date) in (?)", User.select("date(birthday_date)"))
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 1

首先array_of_dates通过将每个日期转换为涵盖一整天的范围来转换日期:

array_of_dates = array_of_dates.map {|date| date.beginning_of_day..date.end_of_day}
Run Code Online (Sandbox Code Playgroud)

这会将每个日期转换为一个范围,例如(Mon 27 Oct 2014 00:00:00..Mon 27 Oct 2014 23:59:59)

现在使用以下查询格式来查找事件:

Event.where(date: array_of_dates)
Run Code Online (Sandbox Code Playgroud)