簡體   English   中英

Rails根據父模型距離計算對子模型進行排序

[英]Rails sort child model based on parent model distance calculation

我有一個product模型和一個shop模型。 兩者之間的關系是商店has_many和產品belongs_to shop。

shop模型具有兩個字段longitudelatitude用於使用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')

訂單功能僅在模型字段中提供。 如何分類產品以計算商店距離。

請幫忙。

看看使用:through的文檔-這應該正是您所需要的。

因此Product看起來像:

class Product < ActiveRecord::Base
  belongs_to :shop
  acts_as_mappable through: :shop
  ...
end

您的查詢將類似於:

Product.joins(:shop).by_distance(origin: [params[:latitude], params[:longitude]])

如果您已經可以對商店進行過濾和排序

@shops = Shop.by_distance(origin:[params[:latitude], params[:longitude]]).sort_by{|s| s.distance_to([params[:latitude], params[:longitude]])}

這將根據距離從每個商店獲得所有產品:

@closest_products = @shops.map(&:products)

如果要淘汰重復的產品,請改用以下方法:

@closest_products = @shops.map(&:children).flatten.uniq

您可以嘗試其他方法(我尚未對此進行測試):

@closest_products = Product.where(shop: @shops)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM