【发布时间】:2008-11-29 08:14:38
【问题描述】:
mysql> desc categories;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(80) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
mysql> desc expenses;
+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| created_at | datetime | NO | | NULL | |
| description | varchar(100) | NO | | NULL | |
| amount | decimal(10,2) | NO | | NULL | |
| category_id | int(11) | NO | MUL | 1 | |
+-------------+---------------+------+-----+---------+----------------+
现在我需要这样的前 N 个类别...
Expense.find_by_sql("SELECT categories.name, sum(amount) as total_amount
from expenses
join categories on category_id = categories.id
group by category_id
order by total_amount desc")
但这在我的 Rails 良心上唠叨不休.. 似乎可以通过 Expense.find 并提供诸如 :group、:joins 之类的选项来实现相同的目标..
- 有人可以将此查询翻译成 ActiveRecord 模型吗?
- 值得吗...就我个人而言,我发现 SQL 更具可读性并且可以更快地完成我的工作。也许因为我还在学习 Rails。不将 SQL 嵌入源代码有什么好处(除了不能更改数据库供应商..sql 风格等)?
- 似乎
find_by_sql没有像find这样的绑定变量规定。解决方法是什么?例如如果我想将记录数限制为用户指定的限制。
【问题讨论】:
标签: ruby-on-rails activerecord