2

次のコードブロックを使用して、特定のデータ範囲の4列のデータを合計する既存のRails2.3.xアプリケーションがあります。

results = connection.execute(<<-SQL)
  SELECT sum(total_hours), sum(expected_hours), sum(total_billable), sum(expected_billable)
  FROM `timesheets`
  WHERE (`timesheets`.`week_starting` BETWEEN '#{Date.today.beginning_of_year}' AND '#{Date.today.monday}')
SQL
total_hours, expected_hours, total_billable, expected_billable = results.fetch_row.map(&:to_f).map(&:to_d)

Rails 3とmysql2にアップグレードしているので、fetch_rowメソッドはもう存在しないので、ARelを使用してこのクエリを整理する良い機会になると思いました。

ARelを使用してこのクエリを実行する方法を知っている人はいますか?

4

2 に答える 2

4

Written in a modular "builder" style, allowing refactoring into reusable scopes:

Timesheet.where('week_starting >= ?', Date.today.beginning_of_year).
  where('week_starting < ?', Date.today.monday).
  select('SUM(total_hours) as total_hours').
  select('SUM(expected_hours) as expected_hours').
  select('SUM(total_billable) as total_billable').
  select('SUM(total_hours) as expected_billable')
于 2012-04-13T03:04:21.800 に答える
1

次のように where 句を簡略化できます。

date_range = Date.today.beginning_of_year..Date.today.monday
Timesheet.where(:week_starting => date_range).

これがBETWEEN節になります。

于 2012-04-13T04:10:39.010 に答える