В Ruby on Rails с Gem / Plugin для иностранцев должна ли настройка внешнего ключа быть видимой в Schema.rb? - PullRequest
1 голос
/ 11 февраля 2012

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

add_foreign_key(:notifications, :invitations, :dependent => :delete)

Однако, когда язапустите миграцию с помощью

rake db:migrate

Запускается, но мой файл schema.rb остается без изменений.Разве изменения не должны быть отражены для настройки в другой базе данных?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012

Если вы используете mysql, вы можете проверить, действительно ли он создал внешний ключ? Я согласен, что в соответствии с документацией schema.rb, если вы планируете переместить приложение в другую систему, вы должны запустить rake db: schema: load. Так что, если информации нет, она, очевидно, не будет работать. Вы были бы вынуждены пройти через все ваши миграции. Я читал исходный код гема иностранца, и кажется, что гем должен внедрить операторы в вашу схему. Ссылка на код, который я думаю, делает это:

https://github.com/matthuhiggins/foreigner/blob/master/lib/foreigner/schema_dumper.rb

Единственное, что я могу вам сказать, это сгенерировать schema.rb с нуля и посмотреть, полностью ли заполняется схема. Если нет, кажется, вы будете вынуждены выполнить миграцию при переходе на другую систему. Вы также можете опубликовать свой вопрос на странице проекта github. Разработчики обычно довольно быстро отвечают.

1 голос
/ 19 февраля 2012

Итак, благодаря ctilly79 я нашел ответ. По какой-то причине я подумал, что, поскольку я использовал SQLite, он все равно создает внешние ключи в Schema.rb для использования в производстве. Это не вариант. Вы должны использовать что-то, что поддерживает внешние ключи, такие как MySQL, чтобы это работало.

...