Im on Rails 4使用地理編碼器來處理位置。如何使用關聯模型上的地理編碼器按距離排序記錄數組?
我有兩個型號上市和位置
上市
class Listing < ActiveRecord::Base
has_many :locations
end
位置
class Location < ActiveRecord::Base
belongs_to :listing
geocoded_by :full_address
after_validation :geocode
def full_address
[street, city, state, country].compact.join(", ")
end
end
我試圖做一個簡單的搜索功能,其中,在城市用戶類型並返回距離大海50英里以內的列表清單查詢。
我有我的搜索功能在我的列表控制器索引操作
def index
@query = Geocoder.search(params[:q]).first
@location = Location.near(@query.address, 50).order("distance")
@listings = Listing.find(@location.map(&:listing_id))
end
正在處理我想要的結果返回給城市搜索要通過距離排序。當我搜索時,返回的結果由列表ID排序。
香港專業教育學院已經能夠使這項工作的唯一辦法,就是做我@listings變量,像這樣
def index
@query = Geocoder.search(params[:q]).first
@location = Location.near(@query.address, 50).order("distance")
@listings = []
@location.each do |l|
@listings.push(Listing.find(l))
end
end
但這運行一堆數據庫查詢的和Im擔心有很多的記錄和搜索,數據庫會有很大的壓力。
是否有更簡潔的方式讓我按照自己想要的方式排列數組?謝謝。
感謝您的迴應,但是當我提出您的建議時,我收到「無法訪問位置」錯誤。 – oobie11 2014-11-20 21:46:48
我完全不知道這些類,可能不是'@ location'嘗試'@ location.to_a'。 – 2014-11-20 22:06:13
不知道這會給你你想要的。如果'@ location'包含帶有id [1,3,4,12]的Location記錄'Listing.find(@location)'將返回帶有這些id的列表記錄(即[1,3,4,12]),而不是記錄屬於位置記錄[1,3,4,12]。 – 2017-04-19 19:55:24