我需要指导才能理解在rails中编写复杂查询的逻辑。
我有三个模特
Business
has_many :customers
has_many :transactions
Customer
has_many :transactions
belongs_to :business
Transaction
belongs_to :businesss
belongs_to :customer
//transaction model has a attribute amount which tells how much amount has been spent in this particular transaction.
现在我需要像这样实现过滤器。我发布截图原因很容易理解。
修改
每笔交易都意味着访问。总花费是指花费的总金额。
答案 0 :(得分:1)
我怀疑是否有一个优雅的单一查询解决方案,它将支持AR的功能。但即使有一个,为了性能,您还必须为总花费排名值创建一个材质视图或聚合表。因此,假设您有物质视图total_spent_ranking(customer_id, rank)
,您可以执行通常的AR查询:
(只是草图。)
Customer.joins(:transaction, :total_spent_ranking).select('customer.id').group_by('customer.id').having('total_spent_ranking.rank > 15 and count(distinct transaction.id) > 10')