Как Rails-способ выполнить обновление данных после структурного изменения БД с помощью db: migrate? - PullRequest
0 голосов
/ 04 декабря 2010

Я изменяю отношение в моей базе данных с has_many на has_many: through.Итак, сейчас у меня есть:

class Brand < Ar::Base
  has_many :products
end

class Product < AR::Base
  belongs_to :brand
end

, и я собираюсь добавить таблицу соединений.

Но, конечно, после этого мне нужно обновить базу данных данными.Я видел, что не стоит делать это в условиях миграции.Где лучше всего это сделать, зная, что после завершения обновления данных мне нужно будет выполнить другую миграцию (т. Е. Удалить исходный столбец brand_id из таблицы продуктов)?

Ответы [ 3 ]

2 голосов
/ 05 декабря 2010

Единовременные изменения, подобные этим, можно выполнить с помощью кода ruby ​​в процессе миграции. Миграции не только для изменения схемы. Идея состоит в том, что миграция с помощью версии / кода даты выполняется только один раз.

2 голосов
/ 04 декабря 2010

Если я не пойму ваш вопрос неправильно, миграция - это место, где необходимо осуществить это преобразование.Целью миграции является изменение схемы и миграция существующих данных для использования схемы.Миграции фиксируют временный аспект изменений схемы слоев, так что вы можете двигаться вперед и назад во времени, не оставляя данные в несогласованном состоянии.Если бы вы перенесли свои строки куда-то еще, у вас нет гарантии, что при запуске этого кода схема будет такой же, какой была при написании кода миграции.

Я считаю, что вы найдете поддержку моей позициипримеры в документации Active Record Migrations api.Возможно, вы путаете миграцию с заполнением начальных данных (rake db:seed), которые обрабатываются в db/seeds.rb.

1 голос
/ 05 декабря 2010

Я думаю, что вы должны по крайней мере включить вызов кода (возможно, задачу rake), которая запускает манипулирование данными в рамках миграции, поскольку вам нужно запустить 2-ю миграцию сразу после манипулирования данными.Если бы это был я, я бы создал задачу граблей, которая манипулирует данными.Это, по крайней мере, удалит код из миграции и позволит вам запустить его вручную, если это будет необходимо.Затем закодируйте свою миграцию и включите вызов этой грабли.Честно говоря, я не понимаю, в чем заключается проблема не использования манипулирования данными в процессе миграции.Особенно, когда вы должны делать вещи в определенном порядке, как вы делаете.Они так тесно связаны друг с другом, так зачем их полностью разделять?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...