举个简单的例子,假设一家书店的书籍只有一位作者。这些书通过订单有很多销售。作者可以有很多书。
我正在寻找一种方法来列出按销售排序的作者。由于销售与书籍相关,而不是与作者相关,我该如何做到这一点?
我猜是这样的:
Author.order("sales.count").joins(:orders => :sales)
但这会返回无法找到列的错误。
我已经能够通过在 Author 模型中定义它们来连接它们。下面显示了销售的正确计数,但它确实为每个作者 ping 数据库......不好。我宁愿急切地加载它们,但我似乎无法让它正常工作,因为如果我删除 self.id 并将连接分配给@authors,它不会列出任何碰巧有 0 销售额的作者。
class Author < ActiveRecord::Base
def sales_count
Author.where(id: self.id).joins(:orders => :sales).count
end
end
更具体地说,如何按计数结果对它们进行排序,以便首先列出最受欢迎的作者?