以下のコードは、Rails 3アプリケーションに変換しようとしているSinatraアプリ(DataMappeを使用)からのものです。これは、Visitクラスのクラスメソッドです。
def self.count_by_date_with(identifier,num_of_days)
visits = repository(:default).adapter.query("SELECT date(created_at) as date, count(*) as count FROM visits where link_identifier = '#{identifier}' and created_at between CURRENT_DATE-#{num_of_days} and CURRENT_DATE+1 group by date(created_at)")
dates = (Date.today-num_of_days..Date.today)
results = {}
dates.each { |date|
visits.each { |visit| results[date] = visit.count if visit.date == date }
results[date] = 0 unless results[date]
}
results.sort.reverse
end
私の問題はこの部分にあります
visits = repository(:default).adapter.query("SELECT date(created_at) as date, count(*) as count FROM visits where link_identifier = '#{identifier}' and created_at between CURRENT_DATE-#{num_of_days} and CURRENT_DATE+1 group by date(created_at)")
Rails(私が知る限り)にはこのリポジトリメソッドがなく、クエリが次のようなオブジェクトで呼び出されることを期待しています。Visit.find
Railsアプリ用にこれをどのように書くのが最適かというヒントを誰かに教えてもらえますか?
私はすべきですか
Visit.find_by_sql("SELECT date(created_at) as date, count(*) as count FROM visits where link_identifier = '#{identifier}' and created_at between CURRENT_DATE-#{num_of_days} and CURRENT_DATE+1 group by date(created_at)")