سؤال

في روبي، أحاول القيام بما يلي.

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

حيث "منذ" عبارة عن سلسلة تمثل مقدارًا من الوقت ("ساعة واحدة"، "يوم واحد"، "3 أيام") وهكذا.أي اقتراحات؟

هل كانت مفيدة؟

المحلول

لقد اخترقت هذا مع جوهرة 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

[عدل] للإجابة على سؤالك، يمكنك تجربة ذلك على النحو التالي:

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

نصائح أخرى

جرب استخدام مزمن لتحليل سلاسل التاريخ إلى كائنات وقت وتاريخ فعلية.

أنا أتفق مع جون ميليكين. مزمن, ، أو حتى مساعديك، ستكون تبعية أخف وأكثر فعالية في حملها من ActiveSupport بأكمله، على افتراض أنك لست محاصرًا بالفعل داخل Rails.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top