Вопрос миграции Rails - PullRequest
       13

Вопрос миграции Rails

2 голосов
/ 03 августа 2009

У меня есть 4 связанных миграции в моем приложении Rails:

Первые 3 миграции создают одну таблицу в self.up и сбрасывают их в соответствующих методах self.down.

4-я миграция запускает задачу rake, которая загружает данные во все три (в self.up). Я думаю, что положить в self.down этой миграции, чтобы удалить строки из 3 таблиц?

Я делаю это неправильно? Вероятно, следовало создать одну миграцию, где я создаю 3 таблицы и загружаю данные в self.up, а просто отбрасываю все три таблицы в методе self.down?

Ответы [ 2 ]

5 голосов
/ 03 октября 2009

Это неправильно!

Миграции следует использовать только для переноса ваших данных Модель , а не ваши Данные .

Rails 2.3.4 добавляет 'seed'. Это файл в db / seeds.rb, содержащий код ruby ​​для «начальной загрузки» вашей базы данных. Это отличный способ создания полустатического контента для вашей базы данных, такого как категории, справочные таблицы или учетные записи пользователей.

Затем вы можете загрузить начальные данные с помощью простой задачи с граблями

rake db:seed
3 голосов
/ 03 августа 2009

Нет действительно правильного или неправильного способа сделать это. Исходя из того, что вы сделали, 4-я миграция должна просто выгружать данные в методе down. Каждое падение должно только отменять действия вверх.

Загрузка данных в миграции, которая создает таблицу, определенно не требуется. Если у вас есть 3 таблицы, которые создают отношения has_many или own_to, то имеет смысл поместить данные в отдельную миграцию, чтобы вы могли создать отношения и затем использовать их в своей загрузке данных.

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

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

...