каков подход, которому нужно следовать, чтобы убедиться, что все предложения where, использующие столбец электронной почты, также делегированы
Вы не можете «делегировать» команды SQL , Вам нужно обновить их все.
Я знаю, что можно переключить все запросы с Station.where(email: value)
на Station.joins(:contact).where('contacts.email': value)
, но этот подход займет очень много времени
Да, это то, что вам нужно сделать, извините!
Если кто-то сталкивался с подобной ситуацией и смог решить ее таким образом, чтобы сэкономить нам время и ошибки, я буду очень рад услышать, что подходы, которым вы руководствовались.
Прежде чем удалить столбец, вы можете сначала сделать это:
class Station < ActiveRecord::Base
self.ignored_columns = ['email']
has_one :contact
delegate :email, to: :contact
# ...
end
Таким образом, вы можете остановить приложение от возможность доступа к столбцу без фактического удаления его из базы данных (например, «мягкое удаление»), что облегчает его возврат.
Сделайте это на ветке и сделайте все спецификации зелеными. (Если у вас хорошее тестовое покрытие, все готово! Но если у вас плохое покрытие, после развертывания возможны ошибки ...)
Если после развертывания произойдет ошибка, вы могли бы верните весь PR или просто временно закомментируйте ignored_columns
, пока вы исправляете sh.
Затем, наконец, как только ваше приложение работает без ошибок, отбросьте столбец.