2011-02-13 69 views
0

現在我剛剛接觸RoR,只是玩弄東西來學習一點關於該語言的知識。我目前正試圖在距離另一個郵政編碼區域(從本地數據庫)獲取郵政編碼。RoR:關於將查詢中的數組轉換爲字符串的問題

我設法制定出:

def get_local_zipcodes(zipcode, distance) 
    @getLocalZipcodesZipHash = Zipcode.find(zipcode) 
    @getLocalZipcodesDistance = distance/0.00062137119 
    @getLocalZipcodesZips = Zipcode.find(:all, :select => "id", :conditions => ["st_distance(ST_GeographyFromText(?), ST_GeographyFromText(geography)) < ?", @getLocalZipcodesZipHash.geography, @getLocalZipcodesDistance]) 
    return @getLocalZipcodesZips 
    end 

這可能是這樣做的草率方式。 (上清除它的建議,將不勝感激,以及)

這的形式返回約30個結果:我想打開郵編引號到一個逗號分隔字符串

[#<Zipcode id: "23320">, #<Zipcode id: "23321">,...,#<Zipcode id: "23708">, #<Zipcode id: "23709">] 

,並只是拋開文本的其餘部分。

我該怎麼做?

- 我以前看過空間適配器插件,但看起來並不像我想要做的那樣。它似乎使用api來獲取它的數據。

回答

2

對於初學者來說,如果這是一種模型方法,您不需要使用實例變量,並且您不會在別處訪問它們。其次,沒有任何實際的開銷來擁有一組Zipcode對象而不是一組等效的String對象,因此您不必擔心這一點。

我建議將你的距離比分母(因爲缺乏更好的描述)轉化爲一個常量。

class YourClass 
    DistanceRatio = 0.00062137119 

    def get_local_zipcodes(zipcode, distance) 
    zipcode = Zipcode.find(zipcode) 
    distance /= DistanceRatio 
    Zipcode.find(...) 
    end 
end 

您也不需要return。 Ruby方法自動返回最後一條語句的結果。

如果你想出於某種原因字符串數組,可以輕鬆地從這句話像這樣讓他們:

get_local_zipcodes(zipcode, distance).map(&:id) #=> ['23320', '23321', ...] 

如果你提供一下這個方法的背景是什麼,在獲得更多的信息各種Zipcode方法,我可以更具體地說明你如何重構這個。

+0

謝謝,看起來更簡潔。我想將結果作爲字符串的原因是因爲我打算使用它在不同查詢中找到的拉鍊,以根據它們的郵編是否在列表中進行選擇......實際上,閱讀更多...我看到我可以將字符串數組傳遞到條件語句中。再次感謝 :) – 2011-02-13 20:40:29