Навигация
Загрузка данных из стендов
Стенды обычно содержат данные, используемые при запуске тестов. Тем не ме¬нее после незначительной доработки мы можем использовать их и для загрузки данных в процессе выполнения миграции. Для иллюстрации процесса предполо¬жим, что в базе данных имеется только что созданная таблица users. Мы опреде¬лили ее структуру с помощью следующей миграции: class AddUsers < ActiveRecord:Migration
def self.up
create_table :users do |t|
t.column :name, :string
t.column :status. :string
end
end
def self.down
drop_table :users
end
end
В каталоге db/migrate создадим подкаталог для хранения данных, которые дем загружать в разработочную базу данных, и назовем его dev_data.
depot> mkdir db/migrate/dev_data
В этом каталоге мы создадим YAML-файл, содержащий данные, которые хотим загрузить в таблицу users. Этот файл мы назовем users.yml.
dave:
name: Dave Thomas
status: admin mike:
name: Mike Clark
status: admin f red:
name: Fred Smith
status: audit
Теперь мы сгенерируем миграцию для загрузки данных из этого стенда в работочную базу данных.
depot> ruby script/generate migration load_users_data exists db/migrate
create db/migrate/0xx_load__users_data. rb
И в заключение мы напишем в файле миграции код, загружающий данные стенда. Здесь не обойдется без некоторой доли волшебства, поскольку код ван на необычном интерфейсе, внедренном в код стенда Rails.
require 'active_record/fixtures'
class LoadUserData < ActiveRecord:Migration
def self.up down
directory = File.join(File.dirname( FILE ), "dev_data" )
Fixtures.create_fixtures(directory, "users" )
end
def self.down
User.delete_all
end
end
В качестве первого параметра метода create_f ixtures используется к каталогу, в котором содержатся стендовые данные. Он задан относительно к файлам миграции, поскольку мы сохранили данные в подкаталоге, созд в каталоге migrations.
Учтите, что с помощью миграции нужно загружать только те данные, к подходят к производственному процессу: справочные таблицы, сведения о определенных пользователях и т. п. Загружать таким способом в прило