ruby-on-rails - 使用 ARel 整理查询

标签 ruby-on-rails arel

我有一个现有的 Rails 2.3.x 应用程序,它使用以下代码块对给定数据范围的 4 列数据进行求和。

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 执行此查询吗?

最佳答案

以模块化“构建器”风格编写,允许重构为可重用范围:

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')

关于ruby-on-rails - 使用 ARel 整理查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134167/

相关文章:

ruby-on-rails - 如何获取在 heroku 中运行的最后一次迁移的数量?

ruby-on-rails - 调用 arerel 操作的动态方法

ruby-on-rails - Ruby/Rails-我可以将联接表的作用域(或类方法)用作WHERE子句的一部分吗?

mysql - 与 mysql 中的 sql_mode=only_full_group_by 不兼容

ruby-on-rails - 在RVM中的Mac OS X 10.9上安装ruby-odbc gem

ruby-on-rails - 在 .each 循环中获取下一个项目而不结束当前项目的迭代

javascript - 邪恶的 pdf - javascript 调试

sql - Express SQL UNION 查询 Rails 方式

sql - 如何仅使用 arel 解决此 sql 语句

ruby-on-rails - Arel AND 子句和 Empty 条件