当我向函数发送请求时,我得到一个带有嵌套哈希的数组,看起来像这样(为了便于阅读,我将其格式化了一点):
@variable = [{:"Some ID"=>1, :"Some area"=>"Berlin", :"Company Name"=>"the dummy company", :"A Date"=>2014-01-17 02:15:53 +0100, :"First Name"=>"Michael", :"Last Name"=>"Myers", :"Number Average"=>#<BigDecimal:7fcf546f3da0,'0.5E1',9(18)>, :"Number One"=>5, :"Number Two"=>5, :Comment=>"Tippi Toppi", :Count=>2},
{:"Some ID"=>2, :"Some area"=>"Berlin", :"Company Name"=>"the dummy company", :"A Date"=>2014-01-17 02:15:54 +0100, :"First Name"=>"Michael", :"Last Name"=>"Myers", :"Number Average"=>#<BigDecimal:7fcf546f3bc0,'0.5E1',9(18)>, :"Number One"=>5, :"Number Two"=>5, :Comment=>"OHA", :Count=>2}]
我想做什么? 我想在表格中显示哈希值:
ID | Some Area | Company Name | ...
1 | Berlin | The Dummy company | ...
2 | Berlin | The Dummy company | ...
我找到了这个answer并试了一下,但我得到了一个
undefined method 'data' for #<Hash: ... >
。
查看
- headers = @variable.map(&:data).flat_map(&:keys).uniq #<< error points here
%tr
- headers.each do |key|
%th= key
- @variable.each do |tr|
%tr
- header.each do |key|
%td= tr.data[key]
答案 0 :(得分:1)
您引用的线程data
是一个属性,不是标准Ruby Hash上的方法。除此之外你的代码似乎还不错。
- headers = @variable.flat_map(&:keys).uniq #<< error used to occur here
%tr
- headers.each do |key|
%th= key
- @variable.each do |tr|
%tr
- headers.each do |key|
%td= tr[key]
除此之外:将逻辑排除在视图之外是一种很好的做法,因此我建议将此代码移动到控制器或模型中headers = @variable.flat_map(&:keys).uniq
答案 1 :(得分:0)
一种简单的方法是
<% @variable.each do |variable| %>
<%= variable["some id"] | variable["some area"]... %>
<% end %>
编辑: 要使其动态化,您可以尝试类似
的内容<% @variable.each do |variable| %>
<% variable.each do |key,value| %>
<%= key : value %>
<% end %>
<% end %>
答案 2 :(得分:0)
如果我看到这一点你的主要问题是如何将哈希键收集到头数组中。 (我假设@variable中的所有哈希都具有相同的结构)
@headers = @variables.first.keys
应该是你在这里所需要的一切。
@rows = @variables.map(&:values)
应该只为您提供包含数据的行。