В зависимости от того, сколько областей ваша база данных должна содержать, у вас могут быть разные стратегии.
Если у вас относительно небольшое количество областей, и у каждой области есть небольшое количество координат, вы можете preload
или даже eager_load
координаты в памяти.
# Suppose `areas` is an `ActiveRecord::Relation`, not just an array
areas.preload(:coordinates).each_with_object([]) do |area, array|
# Do an in-memory sort
geokit_lat_lngs = area.coordinates.sort_by(&:sequence).map do |coordinate|
# ...
end
end
Если количество областей достаточно велико, чтобы взорвать вашу память, то, возможно, ваш текущий подход - лучший. Кстати, я не знаком с типами данных геолокации в PostgreSQL.