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 마일 이내에있는 목록의 목록으로 돌아갑니다. rch 쿼리.
은 내 검색 기능이 나는 결과가 도시를 검색에 거리로 주문해야합니다 반환하려는 나의 리스팅 컨트롤러의 index 액션
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로 정렬됩니다.
필자가이 일을 할 수 있었던 유일한 방법이므로
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
처럼 내 @listings 변수를 수행하는 것이었다 그러나 이것은 DB를 쿼리 및 임 기록과 검색의 많은 것을 걱정의 무리를 실행 , db에 많은 부담이있을 것입니다.
내가 원하는 방식으로 배열을 배열하는 데 더 간결한 방법이 있습니까? 감사.
응답 해 주셔서 감사합니다.하지만 귀하의 제안을 받으면 "위치를 방문 할 수 없습니다."오류가 발생합니다. – oobie11
나는이 클래스들을 정확히 모르고있다.'@ location' 대신에'@ location.to_a'를 시도해 보라. –
이것은 당신이 원하는 것을 줄 것이라고 확신하지 못합니다. '@ location'이 ids [1, 3, 4, 12]로 위치 레코드를 포함한다면'Listing.find (@location)'은 (Listing 1)에서 id 대신에 (즉 [1,3,4,12] 위치 기록 [1,3,4,12]에 속하는 기록. –