现在我是RoR的新手,只是玩弄东西来学习语言。我目前正试图在另一个zip(从本地数据库)的距离内获得zipcodes。
我设法解决了:
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">]
我想将引号中的zipcodes转换成逗号分隔的字符串,然后抛弃其余的文本。
我该怎么做?
- 我之前看过空间适配器插件,但它看起来并不像我想做的那样。它似乎使用api来获取它的数据。
答案 0 :(得分: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方法的更多信息,我可以更具体地说明如何重构此方法。