Доступ к хеш-ключам и атрибутам из представления - PullRequest
0 голосов
/ 09 августа 2010

, пытаясь создать модель с массивом в качестве атрибута, я в итоге создал массив хэшей, например:

    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 ]

1 голос
/ 09 августа 2010

Это должно работать:

<% 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.

0 голосов
/ 09 августа 2010

Вот представление:

<% 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] для доступа к массиву, затем простоцикл по массиву, как если бы это был обычный массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...