Preciso consultar os comentários feitos em um dia. O campo faz parte dos registros de data e hora padrão, is created_at
. A data selecionada é proveniente de a date_select
.
Como posso usar ActiveRecord
para fazer isso?
Eu preciso de algo como:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
não sei ao certo o que você quer dizer com 'usando o intervalo por si só'scope :between, -> (a, b) { where(created_at: a..b) }
Eu pessoalmente criaria um escopo para torná-lo mais legível e reutilizável:
No Comment.rb, você pode definir um escopo:
Em seguida, para consulta criada entre:
Espero que ajude.
fonte
#between?
aceito um intervalo.O Rails 5.1 introduziu um novo método auxiliar de data
all_day
, consulte: https://github.com/rails/rails/pull/24930Se você estiver usando o Rails 5.1, a consulta seria semelhante a:
fonte
require 'active_record'
e está tudo pronto!Este código deve funcionar para você:
Para mais informações, consulte Cálculos de tempo
Nota: Este código está obsoleto . Use o código da resposta se você estiver usando o Rails 3.1 / 3.2
fonte
date()
função de nível de banco de dados ; é potencialmente mais independente de db.Corri esse código para verificar se a resposta verificada funcionava e tive que tentar trocar as datas para acertar. Isso funcionou--
Se você está pensando que o resultado deveria ter sido 36, considere isso, senhor, quantos dias são 3 dias para 3 pessoas?
fonte
fonte
Eu tenho usado os 3 pontos, em vez de 2. Três pontos fornecem um intervalo aberto no início e fechado no final. Portanto, se você fizer duas consultas para os intervalos subsequentes, não poderá obter a mesma linha novamente. ambos.
E, sim, sempre é bom usar um escopo!
fonte
Se você quiser apenas um dia, seria mais fácil assim:
fonte
existem várias maneiras. Você pode usar este método:
Ou isto:
fonte
Deveria haver um comportamento padrão de registro ativo sobre isso. A consulta de datas é difícil, principalmente quando há fuso horário.
Enfim, eu uso:
fonte
Você pode usar a gema abaixo para encontrar os registros entre as datas,
Esta gema é muito fácil de usar e mais clara Por estrela, estou usando essa gema e a API é mais clara e a documentação também é bem explicada.
Aqui você também pode passar nosso campo
Post.by_month("January", field: :updated_at)
Por favor, consulte a documentação e tente.
fonte