Я плохо знаком с Ruby on Rails (я знаю Ruby просто прилично, хотя) и рассмотрение инструментов Migration, это звучит действительно потрясающим. Схемы базы данных могут наконец (легко) войти в управление исходным кодом.
Теперь моя проблема с ним. При использовании Пост-ГРЭС в качестве базы данных это не устанавливает внешние ключи. Я хотел бы преимущества внешних ключей в моей схеме, такие как ссылочная целостность. Таким образом, как я применяю внешние ключи с Миграциями?
Философия Rails заключается в том, что проверки целостности - это бизнес-логика, которая принадлежит модели. Вот почему вы видите то, что видите в БД; Any_id - это просто int, а не "настоящий" fk в поле зрения. Это не ошибка, это сделано по дизайну и поначалу немного странно. Как правило, единственная причина, по которой люди работают с fks на уровне БД, - это когда к БД обращается более одного приложения или унаследованная система. Здесь много дискуссий и несколько замечательных ссылок: Почему при миграции Rails внешние ключи определяются в приложении, но не в базе данных?
Для Rails существует ряд плагинов (поищите в Google), которые будут создавать внешние ключи для вас, когда вы используете специальный символ в миграциях (foreign_key_migrations - один из них из книги Advanced Rails Recipes). Только имейте в виду, что Rails не очень хорошо относится к этой концепции, особенно когда вы пытаетесь удалить объекты (как упомянул glebm).
Проверьте это: http://github.com/matthuhiggins/foreigner
Но сначала убедитесь, что они вам действительно нужны (например, ссылочная целостность - это то, что теоретически не должен ломаться, пока ваш код в порядке, и вы знаете о : independent =>: destroy
и разнице между user.delete
и user.destroy
]).