Rails日期相等不在where子句中工作

时间:2011-08-31 22:54:45

标签: ruby-on-rails ruby database activerecord

说我有ModelAModelB。当我将ModelA的实例保存到数据库时,它还会创建/保存ModelB的实例。在数据库中,我最终使用created_at的UTC显示完全相同的内容。例如:

puts ModelA.first.created_at  # Wed, 31 Aug 2011 22:49:28 UTC +00:00
puts ModelB.first.created_at  # Wed, 31 Aug 2011 22:49:28 UTC +00:00

所以我希望像下面这样的查询返回匹配的记录(但它没有)

# model_instance is instance of SomeModel
ModelA.where(created_at:model_b_instance.created_at)  # returns []

但是这样的事情,使用to_s(:db)确实有效

ModelA.each do |m|
  if m.created_at.to_s(:db) == model_b_instance.created_at.to_s(:db)
    ...  # found matches here
  end
end

有人可以解释我在这里做错了吗?我希望能够编写ModelA.where(created_at: ... )之类的查询,但我目前无法迭代并匹配to_s(:db)

1 个答案:

答案 0 :(得分:0)

要尝试两件事:

  1. 看看db中的created_at值是什么 - 也许有些东西像时区一样(可能是rails推断一个时区而不是另一个)
  2. 在rails log中查看由ModelA.where调用生成的实际sql查询 - 也许它正在做某种意想不到的事情。