2013-11-18 3 views
0

Я пытаюсь создать сайт визуализации данных для данных временных рядов.Разрешить пользователям создавать свои собственные атрибуты в шаблонизированной модели

Я хочу, чтобы пользователь мог загружать собственные данные временных рядов csv. Так что мое веб-приложение может создавать графики из него.

Количество полей, которые пользователь может иметь, должен быть переменным. Пользователь может иметь только temperature, или он может иметь temperature и humidity. Я хочу использовать только одну модель для обработки переменной количества полей. Может быть, шаблонная модель?

Я думаю, что проблема здесь в ActiveRecord и так, как я хочу. Мне, вероятно, придется создать отдельную модель для каждой таблицы, которую пользователь хочет обрабатывать с разным количеством полей.

Есть ли лучший способ справиться с этим с помощью ActiveRecord? Предложения? Я потерян, и я не смог двигаться дальше. Любая помощь приветствуется.

Спасибо, Ejay

EDIT: Еще я думал только о том, модель, которая представляет каждый столбец данных. Чтобы каждый экземпляр содержал одинаковые атрибуты числа. Что-то вроде, :name, :type, :timestamp, :data. Однако это кажется очень неэффективным, потому что мне нужно будет получить доступ к нескольким таблицам, чтобы загрузить один файл csv.

Правильно ли я должен думать об этом?

ответ

1

Мое предложение имеет только модель, называемую DataSet. DataSet имеет три столбца, :name, :data и :user_id. Тип :name должен быть примерно varchar(255). Тип :data - это всего лишь text, и целью является сохранение json blob, представляющего CSV.

Скажем, CSV выглядит следующим образом:

num,value 
1,4 
2,5 
3,4 
4,100 
5,60 

вы разбираете это в хэш, который выглядит как этот

{ 
    1 => 4, 
    2 => 5, 
    3 => 4, 
    4 => 100, 
    5 => 60 
} 

Если вы хотите, чтобы написать это в базу данных, просто сделать:

DataSet s = DataSet.new 
s.name = 'Whatever' 
s.data = parse_csv(csv_file).to_json # "{\"1\":4,\"2\":5,\"3\":4,\"4\":100,\"5\":60}" 
s.save 

Чтобы получить данные обратно, вы можете сделать это:

ActiveSupport::JSON.decode s.data 

Вы можете когда-либо изменить модель, чтобы сделать это преобразование автоматически:

class DataSet < ActiveRecord::Base 
    belongs_to :user 

    def data=(data_hash) 
    write_attribute :data, data_hash.to_json 
    end 

    def data 
    ActiveSupport::JSON.decode read_attribute(:data) 
    end 
end 
+0

Я всегда слышал о JSON, просто не знал, как и то, что она была использована для. Я новичок в рельсах, поэтому вам очень помогают. Для имени, вы имеете в виду тип значений, таких как boolean, integer и float? В приведенном выше примере, как бы указать тип данных отдельных столбцов, а затем нарисовать его? –

Смежные вопросы