Procurando registros do mês atual com uma consulta Datamapper
-
20-09-2019 - |
Pergunta
Estou tentando reproduzir essa consulta SQL que usei com o ActiveRecord:
Post.all(:conditions => ["EXTRACT(MONTH from created_at) = ? AND EXTRACT(YEAR from created_at) = ?", month, year])
Mas como estou convertendo tudo para Datamapper, eu estava procurando uma maneira de fazer isso ...
Alguém pode ajudar?
Solução
Presumo que, já que isso é marcado com "Ruby-on-Rails" que você carrega o ACTIVESUPPPORT. Isso fornecerá o tempo#end_of_month Helper Method. Com ele, você pode reescrever sua consulta como:
time = Date.new(year, month).to_time
Post.all(:created_at => time..time.end_of_month)
Isso não é apenas mais simples, mas também elimina o SQL bruto da consulta (a consulta é mais portátil para outras coisas que não o RDBMS), e o mais importante é que provavelmente terá um desempenho muito melhor do que a outra consulta. Com EXTRACT
O banco de dados provavelmente terá que realizar uma varredura completa para extrair o ano e o mês de CreateD_AT em cada linha, e, em seguida, compare -os com seus valores esperados. Se você possui um conjunto de dados grande, isso pode ser uma carga significativa no seu banco de dados. No entanto, desde que sua coluna criada_at seja indexada, a abordagem acima deve ser extremamente eficiente em comparação.