質問

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