总结来自连接表Ruby on Rails中的表中的数据

时间:2017-04-29 06:21:18

标签: ruby-on-rails

我想问一下如何在一个区块内的每个地段join table获得物料数量总和

requirementalizes表中包含"quantity"列。

例如......

一个区块有3个批次,每个批次都与要求有材料有关 每一批都有...
材料x- 200
材料y-250

我如何总结Block所拥有的每种材料的数量 Block将有...
材料x-600
材料y-750

这就是我的模型关联结构

class Block < ApplicationRecord
  has_many :lots
end

class Lot < ApplicationRecord
  belongs_to :block
  belongs_to :requirement
end

class Requirement < ApplicationRecord
  has_many :requirementalizes
  has_many :materials, through: :requirementalizes
  belongs_to :lot
end

class Requirementalize < ApplicationRecord
  belongs_to :requirement
  belongs_to :material
end

class Material < ApplicationRecord
  has_one :requirementalize
  has_many :requirements, through: :requirementalize
end

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用ActiveRecord :: Calculations sum

只是一个简单的例子,你得到你正在寻找的相关记录,并打电话给@ something.sum(:数量)

以下是使用rails控制台的示例。只是想知道发生了什么。

2.3.3 :009 > total = Block.find(1).lots
...
#records found
...
2.3.3 :010 > total.sum(:quantity)
   (20.7ms)  SELECT SUM(`lots`.`quantity`) FROM `lots` WHERE `lots`.`block_id` = 1
 => 1205 #or some number

参考:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum

答案 1 :(得分:0)

感谢Bryan Bibat。他帮助我解决了这个问题。

这是解决我问题的方法。

Block.each do |block|
  materials = block.lots.joins(requirement: :materials).group("materials.name").sum(:quantity)
  @blocks << { Block: block.block_no, Materials: materials }
end