从视图中访问哈希键和属性

时间:2010-08-09 10:28:29

标签: ruby-on-rails ruby arrays hash

试图创建一个以数组作为属性的模型,我最终创建了一个像这样的哈希数组:

    data1 = {}
    data1[:name] = "Virtual Memory"
    data1[:data] = @jobs.total_virtual_memory
    data2 = {}
    data2[:name] = "Memory"
    data2[:data] = @jobs.total_memory
    @data = []
    @data << data1
    @data << data2

这样填充@data:

[{:data=>[#<Job day: "2010-08-02">, #<Job day: "2010-08-04">], :name=>"Virtual Memory"}, {:data=>[#<Job day: "2010-08-02">, #<Job day: "2010-08-04">], :name=>"Memory"}]

但是我不知道如何在视图中访问这些变量。因此,如同以下一样运行:

for series in @data
  series:name 
     for d in series:data
      data:[Date, Value]
     end    
end

将返回以下内容:

 Name1
      Date1, Value1
      Date2, Value 2,
      Date3, Value 3,
      Date4, Value 4,
  Name2 
      Date1, Value 1,
      Date2, Value 2,
      Date3, Value 3,
      Date4, Value 4,

2 个答案:

答案 0 :(得分:1)

这应该有效:

<% for series in @data %>
  <%= series[:name] %>
  <% for d in series[:data] %>
    <%= d.date %>, <%= d.value %>
  <% end %>
<% end %>

但是,您可以考虑使用更合适的数据结构而不是散列。例如,结构。这看起来像这样:

# in lib/JobData.rb:
JobData = Struct.new(:name, :data)

# in the controller:
data1 = JobData.new("Virtual Memory", @jobs.total_virtual_memory)
data2 = JobData.new("Memory", @jobs.total_memory)
@data = [data1, data2]

# in the view:
<% for series in @data %>
  <%= series.name %>
  <% for d in series.data %>
    <%= d.date %>, <%= d.value %>
  <% end %>
<% end %>

作为一种风格点:我使用了for,因为您使用了for,但一般来说,使用each代替它更为红宝石。

答案 1 :(得分:0)

以下是观点:

<% for d in @data %>
    {   pointInterval: <%= 1.day * 1000 %>,
        name:<%= "'#{d[:name]}'"%>,
        pointStart: <%= 2.weeks.ago.at_midnight.to_i * 1000 %>,  
              data: [
            <% for chart in d[:data] %>
             <%= "'[#{chart.day.to_time(:utc).to_i * 1000}, #{chart.data_attribute}],'" %>
            <% end %>

                    ]
    },                                      
    <% end %>

使用#{d [:name]}访问“name”键的值并使用d [:data]访问数组,然后循环遍历数组,就像它是任何普通数组一样