如何显示嵌套在数组中的哈希值

时间:2014-02-08 14:43:45

标签: ruby-on-rails hash

当我向函数发送请求时,我得到一个带有嵌套哈希的数组,看起来像这样(为了便于阅读,我将其格式化了一点):

@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]

3 个答案:

答案 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)

应该只为您提供包含数据的行。