2013-07-17 3 views
0

У меня есть столбец hstore, который я использую для создания таблицы в Prawn (pdf builder). Данные будут состоять из записей за данный месяц. Поскольку это hstore, используемые ключи, скорее всего, будут меняться изо дня в день, поэтому это должно быть динамичным.Генерировать динамические вызовы ключей hstore в Prawn

нужно определить:

1 Какие уникальные ключи используются в этом месяц

Я создал помощник, чтобы найти уникальные ключи, которые были использованы в течение месяца. Они будут использоваться в качестве заголовков столбцов.

keys(@users_logs) 
# this returns an array like - ["XC", "PIC", "Mountain"] 

В таблице будут отображаться данные пользователя dutylog за месяц. Для тестирования ... Если я явно вызываю известные ключи hstore ... данные отображаются правильно. Но, поскольку его hstore ... Я не буду знать, что столбец таблицы будет в производстве.

Для тестирования я называю известные ключи hstore ... это создает данные строки таблицы креветок в журнале регистрации.

@users_logs.map do |dutylog| 
     [ dutylog.properties["XC"], 
      dutylog.properties["PIC"], 
      dutylog.properties["Mountain"] 
      ] 
end 

Но, поскольку это hstore ... Я не знаю, какие ключи вызывать на производстве. Итак, мне нужно сделать вышеупомянутую динамику итерации.

Я пробовал, без успеха, перебирать каждую запись dutylog, затем перебирать каждый уникальный ключ и выводить один «dutylog.properties [x]» для каждого значения ключа ... но это просто выводит массив ключевые значения. Я попытался использовать send() в блоке, но это не помогло.

@users_logs.map do |dutylog| 
    [ keys(@users_logs).each { |k| dutylog.properties[k] }.join(",") ] 
end 

Любые идеи о том, как я мог бы создать «dutylog.properties [k]» dynamic?

ответ

0

Потребовалось некоторое голову чешет ... но оказываясь быть легко бросить

Это будет строить строки для таблицы Креветки

def hstore_duty_log_rows 
    [keys(@users_logs)] + 

    @users_logs.map do |dutylog| 
     keys(@users_logs).map { |key| dutylog.properties.keys.include?(key) ? "#{dutylog.properties[key]}" : "0" } 
    end 
end