Você deve usar um espaço reservado para obter o formato correto e garantir que ele seja citado corretamente:
t = Time.new
events = Event.where("datetime < :t", :t => t)
Você não pode comparar um
timestamp
coluna com um inteiro no PostgreSQL, mas você pode no SQLite. Você precisa comparar seu timestamp
com outro timestamp
(ou date
) ou uma string que pode ser analisada como um timestamp
. Este SQL não funcionará:SELECT "events".* FROM "events" WHERE (datetime < 132462148)
mas estes irão:
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23 06:52:25.096869')
SELECT "events".* FROM "events" WHERE (datetime < '2011-12-23')
Há várias lições aqui:
- Você também deve começar a desenvolver em cima do PostgreSQL se for implantar no Heroku, o ActiveRecord não o isolará de todas as diferenças entre vários bancos de dados.
- Você deve deixar o ActiveRecord se preocupar com os problemas de conversão de tipo o máximo possível, se você estiver comparando com uma data ou hora, use um espaço reservado e entregue ao AR um objeto de tempo de algum tipo e deixe o AR se preocupar com isso.
- Use marcadores de posição em vez de interpolação de strings sempre que possível.