我有一个交易表,需要找到日期与今天日期匹配的记录.

在rails控制台中,我需要匹配的日期字段如下所示.我已经分配了一张测试记录.

ruby-1.9.2-p0 > deal.start
=> Tue, 10 May 2011 00:00:00 UTC +00:00 

如果我试图找到任何与今天的开始日期相匹配的记录,我会得到零

ruby-1.9.2-p0 > Deal.find_by_start(Date.today)
=> nil

然后我想我可以通过转换日期来匹配.今天是约会时间.

ruby-1.9.2-p0 > Date.today.to_datetime
=> Tue, 10 May 2011 00:00:00 +0000 
ruby-1.9.2-p0 > Deal.find_by_start(Date.today.to_datetime)
=> nil

我怎样才能让它工作?我使用的是Rails 3.

编辑:

ruby-1.9.2-p0 > deal.start.strftime("%a, %e %B %Y") == Date.today.strftime("%a, %e %B %Y")
=> true 

ruby-1.9.2-p0 > Deal.find_by_start.strftime("%a, %e %B %Y") == Date.today.strftime("%a, %e %B %Y")
NoMethodError: undefined method `strftime' for nil:NilClass

推荐答案

记住DateTime包含一个日期和一个时间,所以你要寻找具有精确值的记录,而不仅仅是同一天.

你可以用两种方法中的一种.您可以 Select 从一天开始到结束的时间范围,也可以创建一个date列来帮助更好地分组数据.

范围版本如下所示:

@deals = Deal.where('start BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day).all

另一个要求在表中创建一个新的start_date列,并用相应的日期填充它.您可以为该日期编制索引,并让查询运行得更快,因为范围 Select 在 Big Data 集上并不总是很快.

Ruby-on-rails相关问答推荐

使用turbo流的部分渲染在rails 7中不起作用.

用至少一个缺省值初始化Ruby数组的最简洁方法是什么?

在PDF生成中渲染 colored颜色

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

显示每个 rspec 示例的运行时

如何在 YAML 中声明带有单引号和双引号的字符串?

Rails:保存子对象时更新父对象

如何为 Rails SimpleForm Select 框设置默认 Select 值

单击表格行(使用 bootstrap 程序)时,如何使用模式显示数据?

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

如何在 Ruby 中生成随机日期?

Groovy/Grails :: Ruby/Rails :: 2011 框架状态

Rails,设计认证,CSRF 问题

为什么 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?

Post.all.map(&:id) 是什么意思?

是否可以设置 travis 来运行多种语言的测试?

在 Rails 中命名布尔列

Postgresql JSON 数据列不同

在 Rails 3 中设置会话超时

将现有的 html.erb 转换为 Haml