2012-02-11 6 views
1

Я разрабатываю приложение Ruby on Rails и использую плагин-иностранец для настройки ограничений внешнего ключа в миграциях, например, как это.В Ruby on Rails с Gem/Plugin для иностранцев, если настройка внешнего ключа будет видна на Schema.rb?

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

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

rake db:migrate

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

ответ

1

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

+1

Если вы говорите спасибо кому-то другому, не имеет смысла принимать их ответ ...? –

+0

SQLite поддерживает внешние ключи. –

3

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

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

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