Pergunta

Em Ruby, eu estou tentando fazer o seguinte.

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

onde "desde" é uma seqüência de caracteres que representa uma quantidade de tempo (1 hora', '1 day', '3 dias') e assim por diante.Alguma sugestão?

Foi útil?

Solução

Eu hackeado isso, juntamente com o ActiveSupport gem:

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] respondendo A sua pergunta, você pode tentar assim:

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

Outras dicas

Tente usar Crônica para analisar a data de cadeias de caracteres em real datetime objetos.

Eu concordo com o João Millikin. Crônica, ou até mesmo o seu próprio ajudantes, seria muito mais leve e eficaz de dependência para realizar todo o ActiveSupport, supondo que você já não estão presos dentro de Trilhos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top