Pregunta

En Ruby, intento hacer lo siguiente.

def self.stats(since)
  return Events.find(:all, :select => 'count(*) as this_count', :conditions => ['Date(event_date) >= ?', (Time.now - since)]).first.this_count
end

donde "desde" es una cadena que representa una cantidad de tiempo ("1 hora", "1 día", "3 días"), etc.¿Alguna sugerencia?

¿Fue útil?

Solución

Hackeé esto junto con la gema ActiveSupport:

require 'active_support'

def string_to_date(date_string)
  parts = date_string.split
  return parts[0].to_i.send(parts[1])
end
sinces = ['1 hour', '1 day', '3 days']

sinces.each do |since|
  puts "#{since} ago: #{string_to_date(since).ago(Time.now)}"
end

[editar] Para responder a tu pregunta, puedes intentarlo así:

:conditions => ['Date)event_date) >= ?', (string_to_date(since).ago(Time.now))]

Otros consejos

Intenta usar Crónico para analizar las cadenas de fecha en objetos de fecha y hora reales.

estoy de acuerdo con John Millikin. Crónico, o incluso sus propios ayudantes, sería una dependencia mucho más liviana y efectiva que ActiveSupport completo, suponiendo que no esté atrapado dentro de Rails.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top