2015-09-29 3 views
0

У меня есть Address и ZipCode модели. Address модель есть encrypted_post_code район, ZipCode есть code раздел. Я хотел бы связать Address записи и ZipCode записей с помощью ассоциации has_one, используя указанные поля. В настоящее время мне нужно использовать такие функции ActiveRecords, как include, preload, eager_load и т. Д.Использование ассоциации has_one для модели с зашифрованным первичным ключом

К сожалению, все строковые поля записей адресов зашифрованы (это требование клиента). Я не могу использовать has_one :zip_code, primary_key: :post_code, foreign_key: :code, потому что у меня нет поля post_code в таблице адресов, оно содержит только поле encrypted_post_code.

Пожалуйста, сообщите, как решить эту проблему.

ответ

1

Я не думаю, что ваш клиент действительно понимает преимущества шифрования. Но это не имеет значения, потому что ваша база данных должна создавать ассоциации по id, а не по зашифрованному почтовому индексу.

Итак, ваша таблица zipcode может иметь столбцы id, encrypted_post_code, а затем адрес имеет только поле postcode_id и делает соединение таким образом. Таким образом, вы полностью избегаете шифрования почтовых индексов, пока вам не нужно узнать, что такое настоящий почтовый индекс, после чего вы просматриваете его через ассоциацию и расшифровываете его.

+0

Спасибо! Вы правы, это сработает, но есть ли способ не менять схемы таблиц? Это будет довольно болезненно. –

+1

Просто измените его с миграцией, лучше потратьте немного времени на то, чтобы получить его прямо сейчас, чем навсегда бороться с чем-то странным и неинтуитивным. –

 Смежные вопросы

  • Нет связанных вопросов^_^