模型
class Smoothval < ActiveRecord::Base
has_many :smoothings
has_many :steps
end
class Step < ActiveRecord::Base
belongs_to :usdzar
belongs_to :smoothing
belongs_to :smoothval
default_scope lambda {
order(id: :desc)
}
end
class Usdzar < ActiveRecord::Base
has_many :smoothings
has_many :steps
end
我想要实现的索引视图:
<table><thead>
<tr>
<th>Smoothing1</th>
<th>Smoothing2</th>
</tr></thead>
<tbody>
<tr>
<td>"finalsmprice","stepnum"</td>
<td>"finalsmprice","stepnum"</td>
</tr>
</tbody>
</table
因此,步骤表中每个smoothval的所有fsmprice和stepnums都是
我的index.html.erb看起来像这样:
<h1>Listing Steps</h1>
<table class="table table-striped table-bordered table-condensed">
<thead>
<% Step.all.includes(:smoothval).group_by(&:smoothval_id).each do |smoothval_id, steps| %>
<tr>
<th>
Smoothing: <%= smoothval_id %>
</th>
</tr>
</thead>
<tbody>
<% steps.each do |step| %>
<tr>
<td>
(<%= step.fsmprice %>): <%= step.stepnum %>
</td>
<% end %>
</tr> </tbody>
<% end %>
</table>
表格非常长,显然会显示所有标题和数据。我试图创建一个postgres数据透视表,但是使用tablefunc失败了,所以回来尝试在rails中执行它
在我的控制器中,我可以将smoothval(表格标题)放入一个数组中,如下所示,数组看起来像[1,5]:
sv = Smoothval.where('id IN (SELECT DISTINCT(steps.smoothval_id) FROM steps)')
@assigned = sv.pluck(:id)
如何获得上面的表格布局
由于
答案 0 :(得分:0)
这太难了,并且发表了一篇文章,表示最好创建一个数据透视表 尽管在Postgres中这并不容易,但tablefunc扩展的问题在于它不会动态分配列,因此需要静态分配它们。所以我现在就走这条路,并测试了函数https://github.com/hnsl/colpivot
我坚持使用基础知识并做到了这一点,但需要更多地考虑重构解决方案。
SELECT c_crosstab('Select * from steps', 'ct_view', 'id', 'smoothval_id', 'stepnum', 'first');
SELECT *
FROM crosstab(
'SELECT usdzar_id, smoothval_id, stepnum
FROM steps
ORDER BY 1,2 ASC') -- needs to be "ORDER BY 1,2" here
AS ct ("SV" int, "Smooth1" int, "Smooth2" int, "Smooth3" int);
希望这有助于其他人