2017-06-13 64 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

用日期查询更新答案 –