пятница, 5 ноября 2010 г.

Rails. Загрузить данные в таблицы из YAML файлов

Пусть у нас есть папка, в которой находяться yaml файли с данными для таблиц. Название таблицы и соответствующего yaml файла должны совпадать.

Создадим простой rake-task, который поможет нам наполнить таблицы данными из yaml файлов.

"Path to Yaml directory" - путь к директории с Yaml файлам
table1,table2,table3 - название таблиц в БД.

Реализация таска:


require 'yaml'

namespace :db do
  DATA_DIRECTORY = "Path to Yaml directory"

  namespace :yaml do
    TABLES = %w-table1 table2 table3-

    desc 'Load the yaml data'
    task :load => :environment do |t|
      TABLES.each do |table_name|
        path = DATA_DIRECTORY + table_name.to_s + '.yml'
        model_name = ActiveSupport::Inflector.classify table_name
        model_class = ActiveRecord.const_get(model_name)
        eval "#{model_name}.delete_all"
        data = YAML.load_file(path)
       
        element = {}
        data.each do |item|         
          item.attributes.each do |key, value|
            element[key] = value           
          end
          model_instance = model_class.create(element)
          model_instance.save
        end
        puts "Loaded data from #{table_name}.yml"
      end

      puts "\nLoaded all data from yml files"
    end

    desc 'Remove data'
    task :remove => :environment do |t|
      TABLES.each do |table_name|
        model_name = ActiveSupport::Inflector.classify table_name
        eval "#{model_name}.delete_all"
      end
    end
  end
end


Теперь для того чтобы запустить таск: rake db:yaml:load
Почистить таблицы:  rake db:yaml:remove
Посмотреть все доступные таски в системе: rake -T


Перед каждым запуском rake db:yaml:load все таблицы очищаються автоматически

Комментариев нет:

Отправить комментарий