我想问一下如何在一个区块内的每个地段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
任何帮助将不胜感激。
答案 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