문제

Ruby에서는 다음을 수행하려고 합니다.

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

여기서 "since"는 시간('1시간', '1일', '3일') 등을 나타내는 문자열입니다.어떤 제안이 있으십니까?

도움이 되었습니까?

해결책

나는 이것을 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

[편집] 귀하의 질문에 대답하려면 다음과 같이 시도해 볼 수 있습니다.

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

다른 팁

사용해 보세요 만성병 환자 날짜 문자열을 실제 날짜/시간 객체로 구문 분석합니다.

나는 동의한다 존 밀리킨. 만성병 환자, 또는 심지어 귀하의 도우미조차도 귀하가 아직 Rails 내부에 갇혀 있지 않다고 가정하면 전체 ActiveSupport보다 훨씬 가볍고 효과적인 의존성이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top