[英]Rails sort child model based on parent model distance calculation
我有一個product
模型和一個shop
模型。 兩者之間的關系是商店has_many
和產品belongs_to
shop。
shop模型具有兩個字段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')
訂單功能僅在模型字段中提供。 如何分類產品以計算商店距離。
請幫忙。
看看使用: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.