Когда вы извлекаете новый проект с нуля, вы не должны использовать миграции для создания базы данных.
Вы должны использовать rake db:schema:load
вместо.
Позвольте мне показать вам, почему.
Предположим, вы создали новую модель Post
с таблицей публикаций по миграции 10.
При миграции 11 вы выполняете некоторые специальные разработки для модели Post
.
Через некоторое время вы решаете удалить модель Post
и таблицу сообщений, поскольку она больше не требуется.
Шесть месяцев спустя вы оформляете проект с нуля. Если вы попытаетесь запустить rake db:migrate
, миграция 11 потерпит неудачу с жалобой на отсутствующую модель. Это правда, модель была удалена много месяцев назад, и она больше не доступна.
Вместо этого, если вы запустите rake db:schema:load
, вы инициализируете базу данных с правильной версией схемы.
Говоря о миграциях, если вы только что создали метод почтового индекса и пытаетесь использовать _changed? Волшебный метод в той же миграции, вам необходимо перезагрузить схему раньше.
class MigrationFile < ...
self.up
add_column :user, :postcode, :string
User.all.each { |user| puts user.postcode_changed? } # will fail
User.reset_column_information
User.all.each { |user| puts user.postcode_changed? } # now it works
end
...
end