Модели сгенерированных рельсов - как будут проходить миграции? - PullRequest
1 голос
/ 01 февраля 2011

Я сгенерировал четыре модели в своем приложении Rails, и теперь я хочу создать таблицы для тех же моделей в процессе миграции.

Миграции бланков находятся в моей папке /db/migrate, теперь, в какой последовательности будут выполняться Миграции, если я выполню rake db:migrate

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

Потому что, если я запустил их такими, как они есть, как Rails выяснит t.references часть Миграций ??

Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2011

На самом деле вам не нужно использовать ссылки (они не применяют внешние ключи). Ссылки могут только облегчить чтение, если вы предпочитаете этот синтаксис. Эти две миграции эквивалентны:

create_table :posts do |t|
  t.references :category
end

create_table :posts do |t|
  t.integer :category_id
end

Кроме того, миграции будут выполняться в том порядке, в котором они определены (т.е. в порядке, в котором они были созданы).

3 голосов
/ 01 февраля 2011

Миграция не связана напрямую с вашей моделью.Перед выполнением миграции вам не нужно беспокоиться о том, чтобы что-то добавить (например, ассоциации) в модели или оставить их вне.Миграция - это просто рецепт для создания или изменения таблицы базы данных и ее полей / столбцов.Вы можете отсортировать ассоциации вашей модели до или после выполнения миграций.Это не имеет значения.

Миграции выполняются в порядке имен файлов ваших миграций.Если вы создали свои миграции с помощью script/generate model YourModelName или script/generate migration MyMigration, к имени файла всегда добавляется метка времени (например, 20110201165030).Это гарантирует, что миграции выполняются в том порядке, в котором вы их сгенерировали.

Часть t.references ничего не должна выяснять.Он берет только следующий символ, делает его строкой, добавляет _id и создает целочисленное поле с этим (новым) именем в таблице базы данных.Это просто соглашение.Конечно, не ищет в вашей модели какие-либо ассоциации.

(Примеры кода, приведенные здесь, относятся к Rails 2.3. Если вы используете Rails 3, я думаю, что команды генерированиянемного по-другому).

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