1

루비에 대한 또 다른 진정한 초보자, 그러니 제발 부드럽게하십시오 ... 레일 3.0에서 알렉스 라이저의 지오 코더로 작업 중이며 지오 코더 :: 결과 라이브러리에서 메소드를 호출 할 수 없습니다. 지오 코더 문서를 훑어 보았습니다. 그러나 간단한 한 가지 작업을 수행 할 수 없습니다. 사용자가 제출 한 주소에서 "상태"결과를 추출하십시오. 그래서 "123 Fake Street, San Francisco, CA"를 "CA"또는 "California"로 변경하십시오.레일즈 지오 코더 "정의되지 않은 메소드 에러"

(내 프로그램에서는 결과를 결정하는 데 "상태"정보 만 사용하지만 나중에 앱을 수정하는 데 사용할 전체 주소 정보를 갖고 싶습니다. 전체 주소입니다.)

문서와 다른 답변에서 수집 할 수있는 최상의 모델을 설정했지만이 주제와 비슷한 이전 답변은 도움이되지 않았습니다.

class Project < ActiveRecord::Base      
    attr_accessible :title, :address, :latitude, :longitude  

    belongs_to :user 

    geocoded_by :address 
    after_validation :fetch_coordinates 

    reverse_geocoded_by :latitude, :longitude do |obj, geo| 
    obj.state = geo.state 
    obj.country_code = geo.country_code 
    obj.address = [geo.state, geo.country_code].join(",") 
    end 
    after_validation :reverse_geocode 

end 

그러나 상태, 국가 코드 및 주소에 대해 "정의되지 않은 오류 방법"이 표시됩니다. Geocoder gem의 설명서에서 이러한 방법을 명확하게 제공하므로 이해가되지 않습니다. 내 모델은 단순히 액세스 할 수없는 것 같습니다. (기록을 위해 내 모델은 입력 한 주소에서 위도와 경도를 가져올 수 있으므로 Geocoder가 올바르게 구성되어있는 것처럼 보이며 "geocoded_by"메서드가 훌륭하게 작동하며 Google API에 올바르게 설정되어 있습니다.

나는 여기에 뭔가 빠뜨린 것이 틀림 없다고 확신합니다. 레일 콘솔에서 Geocoder.search ("Miami, FL")를 사용하고 모든 카운티, 주 및 도시 정보를 가져올 수도 있지만 내 모델을 통해 "상태"를 추출 할 수는 없습니다.

도움 주셔서 감사합니다.

답변

1

지오 코더 사이트의 예제를 보면 블록에 양보 된 두 번째 값이 배열 또는 다른 형식의 콜렉션 인 것으로 보이므로 해당 메소드를 직접 호출 할 수는 없습니다 . 대신에 올바른 오브젝트를 먼저 꺼내야합니다.

reverse_geocoded_by :lat, :lon do |obj,results| 
    if geo = results.first 
    obj.city = geo.city 
    obj.zipcode = geo.postal_code 
    obj.country = geo.country_code 
    end 
end 
+0

해당 코드를 사용하여 "city" "zipcode"및 "country"에 대해 정의되지 않은 메소드 오류 메시지가 표시됩니다. 지오 코더 :: 결과 문서를 속지 않았으므로 이들이 왜 작동하지 않는지 모르겠습니다. –

+0

방금 ​​가져 왔습니다. "obj"대신 "project"클래스를 사용해야하고 역 지오 코딩을 사용하지 않으려 고합니다. 도와 주셔서 감사합니다. –

6

rails 서버를 다시 시작하십시오. 지오 코딩이 레일 콘솔에서 훌륭하게 작동하지만 내 앱에 undefined method 'geocoded_by'을 주었던 상황이 발생했습니다. 이것은 동일한 오류가 발생하는 이유가 아닌 것처럼 보입니다. 그러나 그것은 내 것이 었습니다.

+0

이 질문에 대한 답변은 제 문제를 해결하는데 도움이되었습니다. 감사. – camdixon