2017-06-13 61 views
0

我的Rails應用程序有2個模型:成本和帳戶。 我的成本模型包含一個金額列和對帳戶模型(account_id)的引用。
現在我想查詢一個特定帳戶的總金額。就像這樣:查詢模型協會

Cost.where(account_id: 1).sum(:amount) 

它給了我一個確切的結果。我怎樣才能使用,以便在帳戶名稱屬性,而不是賬戶id屬性得到類似的表達更改查詢:

Cost.where(account_name: "salaries").sum(:amount) 

這樣我沒有去尋找ACCOUNT_ID。當然,我的成本模型沒有任何account_name屬性,但只是一個account_id引用。有沒有辦法從account_id推斷account_name?我應該如何編寫正確的查詢?

+0

你嘗試的東西like'Account.includes(:費用)。凡。(ACCOUNT_NAME: 「工資」)之和( :金額)'? –

+0

我試過了,但沒有奏效。在我再次檢查我的模型後,發現我沒有正確設置帳戶關聯(有很多成本)。現在它正在工作。 –

回答

1

您需要使用joins

Cost.joins(:account).where(accounts: { name: "salaries" }).sum(:amount) 

注:在這個查詢中,我假設表的名稱帳戶模型是accounts

編輯:

查詢與日期範圍

Cost 
     .joins(:account) 
     .where(accounts: { name: "salaries" }) 
     .where('created_at >= ? AND created_at <= ?', from_date, to_date) 
     .sum(:amount) 

注:from_dateto_date必須Date對象

例:from_date = "1-3-2017".to_date

+0

謝謝。有用。是的,帳戶模型的表格是帳戶。如果我想添加日期範圍?像:請給我所有與工資賬戶相關的從1-3-2017到31-3-2017的費用? –

+0

用日期查詢更新答案 –