Равенство даты в Rails не работает в предложении where - PullRequest
0 голосов
/ 01 сентября 2011

Скажите, у меня есть ModelA и ModelB.Когда я сохраняю экземпляр ModelA в БД, он также создает / сохраняет экземпляр ModelB.В БД я получаю UTC для created_at, которые отображаются точно так же.Например:

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 голосов
/ 01 сентября 2011

Две вещи, которые нужно попробовать:

  1. посмотреть, какие значения create_at находятся в БД - может быть, что-то не так, как часовой пояс (возможно, rails выводит часовой пояс для одного, но не для другого)
  2. посмотрите в журнале rails фактический sql-запрос, который генерируется вашим вызовом ModelA.where - возможно, он делает что-то неожиданное.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...