2011-02-13 62 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