ruby on rails 参数比较日期和日期时间?

mat*_*atQ 3 sql postgresql activerecord ruby-on-rails date

我收到这个参数: param[:date] = '2017-03-04'

我的数据库中的列是 created_at ,格式如下: '2017-01-01 09:21:23'

当我执行此查询时

Mymodel.where(created_at: params[:date]) 
Run Code Online (Sandbox Code Playgroud)

它返回一个空数组,由于没有经过时间,这是逻辑

我需要与参数日期相对应的所有行。

我怎样才能做到这一点?在这种情况下时间并不重要,我只需要日期。
我使用 postgres 作为数据库。

我需要选择例如特定日期的 All Sell 并且要搜索的列是 created_at。

Ada*_*sek 5

这是一个类型强制问题。由于该created_at字段包含日期和时间,因此您的日期将被转换2017-03-04 00:00:00为查询。任何与该时间戳不完全匹配的内容都将被排除。

有两种方法可以解决这个问题。

数据库不可知

将您的日期转换为Range 对象。ActiveSupportDate#all_day为这个用例提供了帮助程序。

date = Date.parse(params[:date])

MyModel.where(created_at: date.all_day)
Run Code Online (Sandbox Code Playgroud)

由于Date::parse在解析失败时抛出异常,现实世界的实现必须考虑到这一点

my_models = begin
  date = Date.parse(params[:date])

  MyModel.where(created_at: date.all_day)
rescue ArgumentError
  MyModel.all
end
Run Code Online (Sandbox Code Playgroud)

Postgres

您可以将您的created_at字段转换为date仅匹配日期部分。

MyModel.where("created_at::date = ?", params[:date])
Run Code Online (Sandbox Code Playgroud)