Вы можете сделать оба. Если у вас есть один файл, вы можете просто создать скрипт ruby и включить config/environment.rb
, чтобы загрузить среду приложения rails в ваш скрипт ruby. Затем вы можете загрузить файл и обработать каждую строку следующим образом:
include 'config/environment.rb'
File.open("/folder/folder/file_to_parse", "r").each_line do |line|
.....
# interpret line here
....
end
Если это в формате CSV, вы также можете использовать Ruby CSV Librarie (http://ruby -doc.org / stdlib-1.9.2 / libdoc / csv / rdoc / CSV.html)
С другой стороны, вы также можете создать интерфейс для анализа данных в JSON. Вы можете использовать реализацию JSON для ruby (которая описана здесь: http://flori.github.com/json/), чтобы создать действие, которое анализирует один объект, который передается в JSON.
// О проверках:
Пишите валидации в моделях! Затем вы проверяете все модели, которые belongs_to
sth. потому что у вас уже может быть PhoneType
, которые используются в фактической записи. Поэтому будьте осторожны, чтобы не получить дубликаты, когда они вам не нужны.
После этого вы используете метод new
для создания новых объектов (не create
, потому что создаете записи в базу данных). Затем вы анализируете строку, и когда она анализируется, вы можете проверить все свои объекты, используя метод valid?
, который проверяет, проходит ли объект все проверки, определенные в модели.
И только если все ваши объекты проходят проверку, вы сохраняете их в базе данных. В противном случае вы просто не выполняете метод save
, поэтому наборы данных, которые не проходят проверки, не сохраняются в базе данных.
// About th eperformende
Если вам просто нужно выполнить импорт один раз, это не такая уж большая проблема, если скрипт не настолько совершенен. Что вы должны делать, когда в таблице много записей (100 не много, 100000 - это ...), вы должны добавить индексы ко всем столбцам внешнего ключа. Вы можете создать миграцию addIndexesToForeignKeys
и добавить индексы с помощью метода add_index
следующим образом:
add_index :table_name, :column_name
Это ускорит выборочные запросы и немного замедлит вставку, но я думаю, что действия show будут вызываться чаще, чем создания действий;)