数据透视表来自Rails中的关联belongs_to - has_many

时间:2014-05-02 09:18:00

标签: ruby-on-rails

这可能是一个愚蠢的问题,但我刚刚开始学习铁路,这就是我问这个问题的原因。

我有两种模式:

class Product < ActiveRecord::Base
  attr_accessible :name
  has_many :totalsolds
end

class Totalsold < ActiveRecord::Base
  attr_accessible :date, :qty, :product_id, :product_attributes
  belongs_to :product
  accepts_nested_attributes_for :product
end

产品记录如下:

record of product

totalsold的记录看起来像:

totalsold

在视图中,我试图在视图上显示如下:

display on view

问题:是否有某种教程或参考资料来解决我的问题?

注意:我不知道google搜索关键字,如果您知道请告诉我。 如果我的问题质量很差,我会关闭或标记这个问题

更新

我使用pivot_table找到了解决方案,但我不知道如何使用它。

2 个答案:

答案 0 :(得分:1)

前两个表格是ProductTotalSold的简单表格。 TotalSold中的条目表示特定日期 x 数量中特定产品的交易。

这个问题的主要内容是生成如图3所示的表。这涉及很少的连接和分组:

  • 最初,小组约会。
  • 产品分组。
  • 总和(数量)

我不能给出查询正确的镜头,但这可能会有所帮助:

TotalSold.select('created_at, product_id, sum(quantity) as sum').group([:created_at, :product_id])

然后,您可以映射它以生成表格。

希望这会有所帮助:)

答案 1 :(得分:1)

我将以下内容放入seeds.rb文件中(快速而脏)。您可以使用rake db:seed

从命令行运行它
a = Product.create! name: 'Product A'
b = Product.create! name: 'Product B'
c = Product.create! name: 'Product C'

Totalsold.create! date: "2014/02/05", product: a, qty: 31
Totalsold.create! date: "2014/02/05", product: b, qty: 12
Totalsold.create! date: "2014/02/05", product: c, qty: 7
Totalsold.create! date: "2014/03/05", product: a, qty: 23
Totalsold.create! date: "2014/03/05", product: b, qty: 16
Totalsold.create! date: "2014/03/05", product: c, qty: 2

pivot_table = Totalsold.includes(:product).group_by &:date
puts pivot_table

pivot_table.each do |date, products|
  puts "Date: #{date}" 
  puts "Products: "
  products.each { |prod| puts "#{prod.product.name} #{prod.qty}"} 
end

这不需要使用任何非铁轨宝石。基本上,您选择所有totalsolds项目(确保还包括您使用belongs_to映射到模型上的产品信息)。然后,当结果返回时,您可以使用ruby的group_by http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-group_by按日期将记录分组到哈希。