我有一个模型(这里已简化),如下所示:
class Customer < ActiveRecord::Base
attr_accessor :name
has_many :orders
end
class Order < ActiveRecord::Base
attr_accessor :description, :cost, :date
end
我正在使用Postgres - 运行查询的最佳方法是什么,它将返回包含每个客户的最新订单的单个结果?
如果我这样做:
Order.order('date DESC').group('customer')
然后我收到Postgres错误:
PGError: ERROR: column must appear in the GROUP BY clause or be used in an aggregate function
最干净的方法是什么?我是一个Rails新手,所以如果我在这里遗漏了任何重要信息,请告诉我。
答案 0 :(得分:2)
问题是获取每位客户的最新条目
Customer.all.map{|C| [c.name, c.orders.last]}
将返回一个包含客户名称和最新订单的数组。在视图中它将如下所示:
<% @customers.each do |c| %>
<%= c.name %> - <%= c.orders.last.cost %>
<% end %>
结果:
John Travolta - $5454
Johnny Depp - $6849
答案 1 :(得分:0)
Order.order('date DESC').group('customer_id')
我猜您的订单模型按惯例没有客户字段,应该是customer_id
答案 2 :(得分:0)
对于更面向SQL的方法,它应该更好地执行:
Order.where("id in (select max(id) from orders group by customer_id)")
它依赖于最近具有最高ID的订单。