0

我正在使用 Ruby Sequel,我需要找到客户自特定日期以来花费的总金额。此代码有效:

customer = Customer.where(username: params[:username]).first
unless customer
  exit
end
Purchases.where(customer: customer).and('date < ?', params[:date]).sum(:amount)

但是,我想知道是否有一种方法可以使用 Customer 和 Purchases 之间的 Model 关系,而不是使用 where 子句来查找 Purchases,以便代码看起来更清晰。

我在想类似的东西,customer.Purchases.where(...).sum(...)但它不起作用。

知道是否有办法做到这一点?

4

2 回答 2

1

你已经提到

正在考虑类似 customer.Purchases.where(...).sum(...) 但它不起作用。

在您对另一个答案的评论中,您提到了与customer.purchases已经存在的关系。

那么你还应该有一个purchases_dataset- 方法。它是一个Sequel::SQLite::Dataset并返回模型。

所以你可以尝试:

customer.purchases_dataset.where('date < ?', params[:date]).sum(:amount)

(如果它不起作用:您能否发布您的表格和模型定义以进行测试)

于 2015-11-26T21:53:59.357 回答
0

您似乎无法使用模型中声明的关联来加入表。

Sequel 文档仅提出以下生成正确 SQL 的方法:

Album.join(:artists, :id=>:artist_id)
# SELECT * FROM albums
# INNER JOIN artists ON artists.id = albums.artist_id

在您的情况下,它可能如下所示:

Customer.join(:purchases, customer_id: :id).where('date < ?', params[:date]).sum(:amount)
于 2015-11-26T18:21:06.780 回答