Итак, мне интересно, почему Rails не поддерживает создание внешних ключей по умолчанию?
Разве это не нужно?
Или мы должны делать это вручную?
Ответ 1
Ограничения базы данных не требуются больше, чем в вашем автомобиле требуется носить ремни безопасности. Вы можете обойти все, что вам нравится, и все будет отлично работать, пока не появится проблема. Ремень безопасности (ограничения) позволяет вам (данные) безопасно.
Поэтому настоятельно рекомендуется создавать ограничения для обеспечения целостности данных на уровне базы данных, поскольку очень вероятно, что 1) вы будете взаимодействовать с базой данных в какой-то момент за пределами Rails и 2) вы совершите ошибку в своем код, который вызывает недопустимые данные.
Ограничения базы данных могут быть более полезными, но это экономит много работы, особенно когда ваш код может делать предположения о данных и не должен выполнять тонны проверок действительности.
Причина, по которой ActiveRecord не поддерживает внешние ключи из коробки, заключается в том, что он предназначен для агностики базы данных, а внешние ключи не универсально поддерживаются всеми системами баз данных.
Ответ 2
Вы можете добавить поддержку внешнего ключа с помощью Foreigner плагина.
Не все поддерживаемые базы данных для ActiveRecord поддерживают внешние ключи, поэтому инфраструктура Rails не включает ее в качестве основной функции.