У меня есть модель product
и модель shop
. Отношения между двумя магазин has_many
продукты и продукты belongs_to
магазин.
Модель магазина имеет два поля longitude
и latitude
, используемые для расчета расстояния с помощью geokit-rails. Мне удалось отсортировать магазины по ближайшему расстоянию до любой заданной долготы и широты, используя:
Shop.by_distance(origin:[params[:latitude], params[:longitude]]).sort_by{|s| s.distance_to([params[:latitude], params[:longitude]])}
Проблема в продуктах. Продукты также должны быть отсортированы по месту нахождения ближайшего магазина. Я просмотрел и обнаружил, что дочерняя модель может быть отсортирована по родительским атрибутам следующим образом:
Product.joins(:shop).order('shops.name')
Функция заказа работает, только если указано поле модели. Как я могу сортировать товары, рассчитывая расстояние до магазина.
Пожалуйста помоги.
.by_distance
уже применит предложение порядка и отсортирует записи по расстоянию от источника. Использование.sort_by
, которое перебирает результаты в виде массива, ничего не дает - вы буквально делаете одно и то же дважды. - person max   schedule 28.03.2017