Ruby on rails 使用模型关联进行查询

Ruby on rails 使用模型关联进行查询,ruby-on-rails,Ruby On Rails,我的Rails应用程序有两种型号:Cost和Account。 “我的成本模型”有一个“金额”列和对帐户模型帐户id的引用。 现在我想做一个查询,查找特定帐户的总金额。大概是这样的: Cost.where(account_id: 1).sum(:amount) 它给了我确切的结果。如何使用account name属性而不是account id属性更改查询,以获得类似的表达式: Cost.where(account_name: "salaries").sum(:amount) 通过这种方式,我不

我的Rails应用程序有两种型号:Cost和Account。 “我的成本模型”有一个“金额”列和对帐户模型帐户id的引用。 现在我想做一个查询,查找特定帐户的总金额。大概是这样的:

Cost.where(account_id: 1).sum(:amount)
它给了我确切的结果。如何使用account name属性而不是account id属性更改查询,以获得类似的表达式:

Cost.where(account_name: "salaries").sum(:amount)
通过这种方式,我不必查找帐户id。当然,我的成本模型没有任何帐户名称属性,只有一个帐户id引用。有没有办法从帐户id推断帐户名?如何编写正确的查询?

您需要使用联接

注意:在这个查询中,我假设帐户模型的表名为accounts

编辑:

具有日期范围的查询

    Cost
      .joins(:account)
      .where(accounts: { name: "salaries" })
      .where('created_at >= ? AND created_at <= ?', from_date, to_date) 
      .sum(:amount)
注意:from_date和to_date必须是日期对象


例:从2017年1月3日开始。到2017年1月3日为止,您是否尝试过类似的方法。包括:成本。何处账户名称:工资。金额:金额?我尝试过,但没有成功。在我再次检查我的模型并发现我没有正确设置帐户关联后,有很多:成本。现在开始工作了,谢谢。它起作用了。是,帐户模型的表格是accounts。如果要添加日期范围,该怎么办?比如:给我2017年1月3日至2017年3月31日期间与工资账户相关的所有成本?更新答案,并提供日期查询
    Cost
      .joins(:account)
      .where(accounts: { name: "salaries" })
      .where('created_at >= ? AND created_at <= ?', from_date, to_date) 
      .sum(:amount)