Question

En Ruby, j'essaie de faire ce qui suit.

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

où « depuis » est une chaîne représentant une durée (« 1 heure », « 1 jour », « 3 jours ») et ainsi de suite.Aucune suggestion?

Était-ce utile?

La solution

J'ai piraté ceci avec la gemme 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

[modifier] Pour répondre à votre question, vous pouvez essayer comme ça :

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

Autres conseils

Essayez d'utiliser Chronique pour analyser les chaînes de date en objets datetime réels.

je suis d'accord avec John Millikin. Chronique, ou même vos propres assistants, constitueraient une dépendance beaucoup plus légère et efficace à transporter que l'ensemble d'ActiveSupport, en supposant que vous n'êtes pas déjà piégé dans Rails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top