Domanda

In Ruby, sto cercando di fare quanto segue.

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

dove "since" è una stringa che rappresenta un periodo di tempo ("1 ora", "1 giorno", "3 giorni") e così via.Eventuali suggerimenti?

È stato utile?

Soluzione

L'ho hackerato insieme alla gemma 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

[modifica] Per rispondere alla tua domanda, potresti provare in questo modo:

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

Altri suggerimenti

Prova a utilizzare Cronico per analizzare le stringhe di data in oggetti datetime effettivi.

Sono d'accordo con John Millikin. Cronico, o anche i tuoi stessi aiutanti, sarebbe una dipendenza molto più leggera ed efficace da trasportare rispetto all'intero ActiveSupport, presupponendo che tu non sia già intrappolato all'interno di Rails.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top