2

Addressのクラスにはgeocode、メソッドのパラメーターのジオコーディングから派生した住所オブジェクトの配列を返すクラスメソッドがあります(ジオコーディングの結果が完全に一致する場合、配列には1つの要素が含まれます)。

このメソッドを作成する際の厄介な部分の1つは、GeoKitアドレスオブジェクトを私のアドレスオブジェクトに変換することです(たとえば、「street_address」->「address1」)。これを行うためのより良い方法はありますか?

class Address < ActiveRecord::Base
  def self.geocode(string)
    return nil if string.nil?

    results = Geokit::Geocoders::GoogleGeocoder.geocode(string)

    address_objects = Array.new

    results.all.each do |r|
      params = Hash.new

      params['address1'] = r.street_address
      params['city'] = r.city
      params['zipcode'] = r.zip
      params['state'] = State.find_by_abbr(r.state)
      params['country'] = Country.find_by_iso(r.country_code)

      new_address = Address.new(params)
      new_address.single_line_address = r.full_address

      address_objects << new_address    
    end

    return address_objects
  end
end
4

1 に答える 1

5

次はどうですか

class Address < ActiveRecord::Base
  def self.geocode(string)
    return if string.nil?

    results = Geokit::Geocoders::GoogleGeocoder.geocode(string)
    results.all.map do |r|
      Address.new do |address|
        address.address1  = r.street_address
        address.city      = r.city
        address.zipcode   = r.zip
        address.state     = State.find_by_abbr(r.state)
        address.country   = Country.find_by_iso(r.country_code)
        address.single_line_address = r.full_address
      end
    end
  end
end
于 2009-07-17T15:27:18.107 に答える