Como devo escrever a declaração condicional para quando desejo obter todos os registros que foram criados hoje?
ruby-on-rails
date
rails-activerecord
Victor Lam
fonte
fonte
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
seja muito inteligente, eu endossariaPost.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
. Há um ponto em fazer de uma forma que você possa manipular o tempo. Por exemplo, se você estiver testando, provavelmente irá manipular o tempo e então a primeira opção não funcionará. Você deseja evitar esse tipo de possível falha futura que provavelmente levará algum tempo de depuração.Eu sei que esta pergunta tem uma resposta aceita. A solução sugerida na resposta aceita pode causar problemas de desempenho quando o tamanho da mesa aumenta.
Normalmente, se você realizar pesquisas com base na
created_at
coluna, adicione um índice na tabela em seu arquivo de migração.Agora, para consultar os registros criados hoje:
Rails 3/4
Para pesquisar postagens criadas em um dia específico.
--------- OU -------------
Adicione um método estático ao seu modelo
Rails 2
--------- OU -------------
Adicione um named_scope ao seu modelo
fonte
scope
exemplo neste post é apenas para Rails 3, já que parece que está sob o título Rails 2. No Rails 2, você precisaria usarnamed_scope
ao invés descope
. Além disso, no Rails 3, você poderia usar de forma equivalente um método de classedef self.today where("created_at >= ?", Time.now.beginning_of_day) end
que provavelmente é mais limpo do que usar um escopo neste caso, já que permite que você renuncie ao lambda.MySQL:
PostgreSQL:
fonte
Resposta de Mohit Jain adaptada para Rails3
fonte
O Rails 5.1 tem um
all_day
helper que é útil aqui.ou
fonte
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
Isso "namescope" o atributo com o
table_name
.fonte
model.rb
posts_controller.rb
fonte
between_period
parece interessante. Não encontrei nenhuma documentação para isso. Você pode fornecer algum link? Como o Rails escolhe a coluna para comparação?Por alguma razão, nenhuma das outras soluções neste post nem em outras no StackOverflow funcionou para mim (usando Rails 4.2.4 e Ruby 2.2.3p173). Esta é a única consulta que consegui fazer com meu banco de dados Postgres:
fonte
Para consultar os registros criados a partir de hoje
Use o escopo com arel
Então podemos usá-lo
fonte
where('created_at >= now()')
só encontraria itens onde created_at estivesse no futuro..lteq(Time.zone.now.end_of_day))
.No rails 4.2.3, para obter os registros criados hoje, usando o mysql use o seguinte.
@usergoals = Goal.where ("userid =: userid e Date (created_at) =: date", {userid: params [: id], date: Date.today})
aqui estou usando várias condições, se você quiser, pode editá-lo para uma única condição.
fonte