При наличии в профиле ассоциации belongs_to :user
, если вы хотите, чтобы эта ассоциация была доступна при следующей загрузке объекта из базы данных, вам лучше сохранить user_id
в таблице profiles
.Там действительно нет другого пути.Однако вам, конечно, не нужен столбец profile_id
для противоположной ассоциации.Rails достаточно умен, чтобы смотреть в таблицу profiles
при интерпретации ассоциации User
* has_one :profile
.
При этом, как правило, не стоит беспокоиться о стоимости одного целочисленного столбца базы данных.В этом случае вам не нужен столбец целых чисел, но имейте в виду, что адрес электронной почты пользователя будет в несколько раз больше с точки зрения байтов хранилища и размера индекса.
Существуют некоторые недостатки наличия profile_id
колонка, кстати.Насколько мне известно, Rails даже не обновит столбец автоматически, если вы переназначите атрибут profile
для a User
.Такое поведение характерно для belongs_to
ассоциации.
Кроме того, хранение избыточной информации в реляционной базе данных создает проблемы, поскольку открывает возможность сокращения.Если пользователь 1 указывает на профиль 1, а профиль 1 указывает на пользователя 2, как вы это интерпретируете?Каким из двух лишних фактов вы доверяете?И если одному факту всегда доверяют другому, какой смысл хранить второй факт вообще?Это как бы касательно вашего вопроса, но я подумал, что все же стоит упомянуть.