2015-11-25 88 views
0

我正在使用Ruby Sequel,我需要查找特定日期以來客戶花費的總金額。此代碼的工作:續集關係和SQL函數

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

不過,我想知道是否有使用客戶和購買與否的關係模型使用where子句找採購,從而使代碼看起來更整潔的方式。

我正在考慮像customer.Purchases.where(...).sum(...)這樣的東西,但它不起作用。

任何想法,如果有辦法做到這一點?

回答

1

您已經提到

在想什麼像customer.Purchases.where(...)。sum(...)但它不起作用。

並在您的意見another answer你提到與customer.purchases已存在的關係。

那麼你應該也有一個purchases_dataset-方法。這是一個Sequel::SQLite::Dataset並返回模型。

所以,你可以嘗試:

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

(如果它不工作:能否請您發表您的表和模型定義進行測試)

+0

這正是我一直在尋找,沒不知道_dataset的事情。完善! –

+0

我上週檢測到它;) – knut

0

看起來您無法使用模型中聲明的關聯來加入表格。

Sequel documentation提出只以下的方法來產生正確的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)