我正在使用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(...)
这样的东西,但它没有用。
知道是否有办法做到这一点?
答案 0 :(得分:1)
你已经提到了
正在考虑像customer.Purchases.where(...)。sum(...)之类的东西,但它不起作用。
并在another answer的评论中提到与customer.purchases
的关系已经存在。
然后你还应该有purchases_dataset
- 方法。它是Sequel::SQLite::Dataset
并返回模型。
所以你可以试试:
customer.purchases_dataset.where('date < ?', params[:date]).sum(:amount)
(如果它不起作用:您能否发布您的表格和模型定义以进行测试)
答案 1 :(得分: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)