2015-07-30 2 views
0

У меня есть рубиновый скрипт, написанный, который принимает файл CSV и преобразует входные данные в хэш:Рубин на Rails упорно магазин Hash из CSV

Culper = File.open('.\CulperCSV.csv') 

culper_hash = {} 

# set up culper code hash from provided CSV 
CSV.foreach(Culper) do |row| 
    number, word = row 
    culper_hash[word] = number 
end 

, и я пытаюсь сделать приложение Rails с помощью сценария.

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

Мои мысли:

1) Загрузите данные CSV в базу данных (семя его), и каждый раз, когда я получаю посетитель на моем сайте, сделайте выше назначение в хэш, но из БД. (не уверен, как это сделать, но я могу исследовать его).

или

2) Загрузить полный хэш в базе данных (я думаю, что я бы сериализовать его?), Так что я могу сделать только один извлечь из БД и имеют хэш готов к работе.

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

ответ

0

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

rails new app_name 
bundle install 
rake db:create 

Создание модели:

rails g model model_name column_name:text 
rake db:migrate 

Открыть model_name.rb файл и добавьте следующую строку

serialize :column_name 

Теперь все наборы. Просто запустите свой скрипт для анализа файла .csv и сохранения хэша в db. Теперь ваша колонка может хранить хэш.

Culper = File.open('.\CulperCSV.csv') 
# get the object from database 
obj = ModelName.first 

# set up culper code hash from provided CSV 
CSV.each(Culper) do |row| 
    number, word = row 
    obj.column_name[word] = number 
end 
obj.save 
+0

Благодарим вас за быстрый и подробный ответ. Я следил за вашими указаниями, но смутился на последнем шаге, который должен фактически загрузить db/model с моими значениями CSV. Я попытался запустить мой файл как скрипт, но потом он не может подключиться к db (неинициализированная константа CulperKey ... которая является моим именем модели), поэтому я попытался поместить свой скрипт в db/seeds.rb и запустить «rake db: seed ', и я получаю: «undefined method' culper_hash »для nil: NilClass« где culper_hash - мое имя_колонки. Можете ли вы объяснить, что я должен делать, чтобы заполнить db и, кроме того, как получить доступ к моему хэшу, как только я это сделаю? – mrlevitas

+0

Пожалуйста, подтвердите, вы запустили скрипт в консоли проекта? Если да, то пожалуйста ** запустите «CulperKey» ** перед запуском скрипта, если вы не используете консоль rails, то, пожалуйста, откройте консоль проекта и запустите там скрипт, чтобы открыть консоль проекта, 1) путь «cd» к каталог проекта '' 2) 'rails c' 3)' CulperKey' (установить соединение с базой данных) 4) Запустить свой скрипт –

+0

А, я не знал об этой возможности запускать скрипты из консоли rails ... так вот как вы можете установить соединение с db и изменить его вручную. Я решил проблему с помощью ** rake task ** и опубликовал шаги, которые я выполнил в отдельном ответе. Благодарим вас за руководство. – mrlevitas

0

Ваш .csv файл, кажется, уже находится в каталоге приложений Rails, поэтому время загрузки не должно быть плохим (если оно действительно не велико). Однако, если этот файл не изменится, и вам потребуется только небольшая часть его за раз, я бы сохранил его в вашей базе данных.

Создайте модель/миграцию, которая соответствует данным, содержащимся в файле .csv, а затем (после миграции миграции) запустите скрипт для анализа данных из вашего файла .csv в вашу базу данных.

0

мне удалось решить мою проблему следуя совету @Kh Аммада: создание нового приложения, создавая модель для него, и маркировки моей колонки сериализации.

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

#lib/tasks/import.rake 
require 'csv' 

task :import, [:filename] => :environment do 

    culper_hash = {} 

    Culper = File.open('.\CulperCSV.csv') 

    CSV.foreach(Culper) do |row| 
     number, word = row 
     culper_hash[word] = number 
    end 

    # culper_hash == column_name 
    obj = CulperDict.create(culper_hash: culper_hash) 
    obj.save 
end 

и побежал с:

$ bundle exec rake import 

и моя модель содержала весь хеш-стол в одной записи!

Я использовал эту статью, чтобы понять, как запустить грабли задачу: http://erikonrails.snowedin.net/?p=212

В частности, последний комментарий на странице по Lauralee (размещены на 20 декабря 2012 в 8:47 утра), который врезался в аналогичная проблема.

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