【发布时间】:2011-03-15 13:50:35
【问题描述】:
- 项目 has_many :items
- 项目属于_to :project
我正在尝试按项目的总价对项目进行排序。比如:
Project.includes(:items).order('SUM(items.price)')
使用此代码,ActiveRecord 仅返回第一个项目。我错过了什么?
【问题讨论】:
标签: mysql ruby-on-rails ruby-on-rails-3 activerecord
我正在尝试按项目的总价对项目进行排序。比如:
Project.includes(:items).order('SUM(items.price)')
使用此代码,ActiveRecord 仅返回第一个项目。我错过了什么?
【问题讨论】:
标签: mysql ruby-on-rails ruby-on-rails-3 activerecord
我还没有尝试过 v3 的东西,但我想应该是这样的
Product.joins(:items).group('products.id').order('SUM(items.price)')
【讨论】:
Project.find_by_sql "
select projects.*
from projects
left join (
select project_id, sum(price) as items_sum
from items
group by project_id) as sums on
project.id = sums.project_id
order by sums.items_sum
以上 SQL 应该适用于大多数数据库系统(MySQL、PostgreSQL、...)。
AR 记录includes 主要用作预加载解决方案。而且我不确定您是否可以这样使用它 - 对父表的记录进行排序。
【讨论】:
:join参数。这是品味问题,但对我来说,干净的 SQL 看起来比混合的 AR / SQL 更好。也许 Rails 3 AREL 更灵活,因为允许在干净的 AR 中编写 SQL。但我对 AREL 还不是很了解。