1

在Ruby的另一個真正的新手這裏,所以請溫柔... 我正在與rails3.0的alexreisner的地理編碼器,我無法從Geocoder :: Results lib調用方法。我深入瞭解Geocoder文檔,但我無法完成一件簡單的事情:從用戶提交的地址中提取「狀態」結果。因此,將「加利福尼亞州舊金山123街」改爲「CA」或「California」。 (我的程序現在只會使用「狀態」信息來幫助確定結果,但我希望在完善應用程序後有詳細的地址信息供我使用,這就是爲什麼我要求一個完整的地址。)Rails Geocoder「未定義的方法錯誤」

我已經建立了我的模型通過最好的我已經能夠從文檔和其他答案我已經在這裏找到,但以前的答案類似於這個問題沒有幫助我:

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)。

我很確定我在這裏錯過了一些簡單的東西。在rails控制檯中,我甚至可以使用Geocoder.search(「Miami,FL」)並且提取所有縣,州和城市的信息,但我似乎無法通過我的模型提取「狀態」。

感謝您的幫助!

回答

1

如果您查看Geocoder網站上的示例,您會看到第二個賦予該塊的值似乎是一個數組或其他某種形式的集合,因此您無法直接調用其上的方法。相反,您首先必須將正確的對象拉出來:

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

使用該代碼,我仍然收到「城市」「郵編」和「國家」未定義的方法錯誤消息。我沒有使用Geocoder :: Result文件,所以我不知道爲什麼這些不起作用。 –

+0

剛剛得到它。我需要使用我的「項目」類而不是「obj」,並且真的不想使用反向地理編碼。感謝您的幫助。 –

6

確保您重新啓動rails服務器。我遇到了一種情況,地理編碼在rails控制檯中運行良好,但在我的應用中給了我一個undefined method 'geocoded_by'。看起來好像這不是你得到同樣錯誤的理由,但它是我的。

+0

這個答案幫助我解決了我的問題,因爲我三重檢查的代碼確保它是正確的。謝謝。 – camdixon

相關問題