RoR:关于将数组从查询转换为字符串的问题

时间:2011-02-13 20:17:48

标签: ruby-on-rails

现在我是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来获取它的数据。

1 个答案:

答案 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方法的更多信息,我可以更具体地说明如何重构此方法。