分组加入rails

时间:2016-05-13 09:53:43

标签: ruby-on-rails

我有两张桌子

table 1: has_many table2
table1 fields are id,name,amount, contract_id

table 2: belongs to table1
table2 fields are id,name,table1_id

让我们举个例子 表1一条记录在表2中有3条记录   Table1.where(contract_id:2).table2.counts = 3

  Table1.where(contract_id: 2) = id:2, name: "abc", amount= 100, contract_id: 2
  Table1.where(contract_id: 2).table2 = id:1, name: "abc1", table1_id: 2
                          id:2, name: "abc2", table1_id: 2
                          id:3, name: "abc3", table1_id: 2

当我尝试使用连接进行分组时,会产生问题

Table1.joins(:table2).where(contract_id: 2).group(:name).sum(:amount)
I want result here ["abc", 100]
But its give me ["abc", 300]

提前致谢

2 个答案:

答案 0 :(得分:0)

我假设标准的Rails约定在Table1.table_nametable1s(复数)。如果您以不同方式进行设置,则需要修改此答案。

group :name "table1s.name"。 Rails假定您的意思是table2s.name,因为这是生成查询的模型。您是否尝试按Table1.joins(:table2).where(id: 2).group("table2s.name").sum(:amount) 进行分组?如果是这样,你必须明确指定:

where(id: 2)

同样,table1是指proguard-rules.pro,但我认为在这种情况下,这就是你的意思,对吗?

答案 1 :(得分:-1)

这是一种错误的方法:如果你只想获取table_id:2

,请尝试这样做
Table1.joins(:table2).where(table2: {table1_id: 2}).group(:name).sum(:amount)