Есть ли способ запретить ActiveRecord загружать атрибут одной модели?

#ruby-on-rails #rails-activerecord

#ruby-on-rails #rails-activerecord

Вопрос:

В моем приложении Rails 6 у меня есть «полигональная» модель. В качестве одного из его атрибутов используется ‘geography’ (представление области с географической привязкой), которая является объектом RGeo в Rails и столбцом geography из PostGIS.

У меня есть модель ‘Rule’, которая связана с ‘Polygon’ через отношение ‘многие ко многим’ (model ‘Spatial_Domain).

Всякий раз, когда создается или обновляется объект правила, Rails загружает все связанные с ним полигоны перед фиксацией в моей базе данных Postgresql. Я обнаружил, что загрузка объекта RGeo в столбец «география» моей таблицы polygons занимает много времени, потому что полигоны большие и сложные. Итак, я попробовал это решение https://github.com/rgeo/activerecord-postgis-adapter/issues/187#issuecomment-286278821 , что значительно увеличило время отклика, но моему приложению по-прежнему требуется до 70 секунд для выполнения задач «создание» и «обновление».

Итак, здесь я возвращаюсь к своему вопросу: есть ли способ запретить ActiveRecord загружать атрибут ‘geography’? (Мне нужен ActiveRecord только для создания этого атрибута в соответствующей таблице во время миграции через gem active-record-postgis).

В настоящее время мое приложение не требует, чтобы RGeo выполнял вычисления по «географии» в Rails, потому что необходимые вычисления выполняются из базы данных.

Комментарии:

1. Вы можете ограничить, какие атрибуты выбираются из базы данных с помощью Model.select(:list, :of, :attributes) . Затем вы можете добавить это как default_scope, если вы действительно никогда не хотите, чтобы этот столбец загружался из rails

2. @StefanRendevski

3. это то, что вы искали?