¿Cómo obtener registro creado hoy por rails activerecord?
¿Cómo debo escribir la instrucción condicional para cuando quiero obtener todos los registros que se crearon hoy?
9 answers
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
PS: Esta respuesta ha sido modificada ya que la respuesta de Harish Shetty era mejor que la mía. Como mi respuesta es aceptada una. He actualizado esta respuesta para el apoyo de la comunidad
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-03 21:17:37
Sé que esta pregunta tiene una respuesta aceptada. La solución sugerida en la respuesta aceptada puede causar problemas de rendimiento cuando el tamaño de la tabla crece.
Normalmente, si realiza búsquedas basadas en la columna created_at
, agregue un índice en la tabla en su archivo de migración.
add_index :posts, :created_at
Ahora, para buscar registros creados hoy:
Carriles 3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
Para buscar publicaciones creadas en un día específico.
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))
--------- O -------------
Agregue un método estático a su modelo
class Post < ActiveRecord::Base
def self.today
where("created_at >= ?", Time.zone.now.beginning_of_day)
end
end
Post.today #returns posts today
Carriles 2
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])
--------- O -------------
Agregue un named_scope a su modelo
class Post < ActiveRecord::Base
named_scope :today, lambda {
{
:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day]
}
}
end
Post.today #returns posts today
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-29 16:26:34
MySQL:
Model.all :condition => ["DATE(created_at) = ?", Date.today] # rails 2
Model.where("DATE(created_at) = ?", Date.today) # rails 3
PostgreSQL:
Model.all :condition => ["created_at::date = ?", Date.today] # rails 2
Model.where("created_at::date = ?", Date.today) # rails 3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-05 09:45:25
Respuesta de Mohit Jain adaptada para Rails3
Model.where "DATE(created_at) = DATE(?)", Time.now
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-20 22:12:45
Modelo.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
Posts_controller.rb
Post.posted_today
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-11 06:03:59
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
Este "namescopes" el atributo con el table_name
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-24 21:27:37
Por alguna razón, ninguna de las otras soluciones en este post ni otras en StackOverflow funcionaron para mí (usando Rails 4.2.4 y Ruby 2.2.3p173). Esta es la única consulta que pude obtener para trabajar con mi base de datos Postgres:
Post.where("created_at >= TIMESTAMP 'now'")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-06 10:32:01
Para consultar los registros que se crearon a partir de hoy
Usar scope con arel
class Post < ActiveRecord::Base
scope :create_from_today, -> {
where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day))
}
end
Usar ámbito con consulta raw
class Post < ActiveRecord::Base
scope :create_from_today, -> {
where('created_at >= now()')
}
end
Entonces podemos usarlo
today_posts = Post.created_from_today
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-21 05:48:06
En rails 4.2.3 para obtener los registros creados hoy, usando mysql use lo siguiente.
@usergoals = Gol.where ("userid =: userid and Date (created_at) = :date", { userid: params[:id], date: Date.hoy })
Aquí estoy usando múltiples condiciones si lo desea, puede editarlo para una sola condición.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-12 06:38:33