首先,我想提一下我对Ruby和Rails的完全新手,我正在学习的第一天,所以如果我的问题看起来有些不清楚或太宽泛,我会道歉.
我正在尝试做一些简单的事情(我想?),这是为了转动一个表格.
我有一个看起来像这样的表:
----------------------------------
| Name | Product ID | Amount |
|----------|----------------------
| Robert | P1 | 2 |
| Michael | P2 | 1 |
| Leonard | P2 | 1 |
| Robert | P2 | 4 |
| Robert | P3 | 2 |
| Michael | P3 | 1 |
----------------------------------
Run Code Online (Sandbox Code Playgroud)
......我想把它变成这样的东西:
---------------------------
| Name | P1 | P2 | P3 |
---------------------------
| Robert | 2 | 4 | 2 |
| Michael | - | 1 | 1 |
| Leonard | - | 1 | - |
---------------------------
Run Code Online (Sandbox Code Playgroud)
我不太清楚如何实现这一目标.我环顾四周,没有找到任何与我的问题有关的内容.
我发现了一个名为pivot_table的gem,可以在这里找到:https://github.com/edjames/pivot_table但我不知道如何正确使用它.它有一个小指南,但我不知道在哪里放置代码.
任何帮助是极大的赞赏.
谢谢.
看看你的表和你正在寻找的结果,我会这样做(我假设它是一个订单表?)
result = []
Order.all.group_by(&:name).each do |name, orders|
record = {}
record["name"] = name
orders.each do |order|
record[order.product_id] = order.amount
end
result.append(record)
end
Run Code Online (Sandbox Code Playgroud)
我希望这会给你一个很好的起点!
首先安装宝石
# In your Gemfile
gem 'pivot_table'
Run Code Online (Sandbox Code Playgroud)
然后在您的终端中运行
bundle install
Run Code Online (Sandbox Code Playgroud)
假设您的第一个表所代表的模型是Sale.
sales = Sale.all
grid = PivotTable::Grid.new do |g|
g.source_data = sales
g.column_name = :product_id
g.row_name = :name
end
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用文档中列出的其他方法.例如
g.column_headers # ['P1', 'P2', 'P3']
Run Code Online (Sandbox Code Playgroud)
注意:这只是阅读您链接的GitHub页面.我从未使用过宝石.
编辑:
您可以将代码放在一个模块中:
# lib/PivotTable
module PivotTable
def grid(data, options = {})
grid = PivotTable::Grid.new do |g|
g.source_data = data
g.column_name = options[:column_name]
g.row_name = options[:row_name]
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后你会从其他地方用它来调用它
include PivotTable
def my_method
sales = Sale.all
grid = grid(sales, { :row_name => :name, :column_name => :product_id })
# do stuff
end
Run Code Online (Sandbox Code Playgroud)
这样,您可以重用网格生成代码并使用任意参数调用它.
| 归档时间: |
|
| 查看次数: |
6070 次 |
| 最近记录: |