Заставь GeoKit играть с моим классом Address - PullRequest
2 голосов
/ 17 июля 2009

My Address class имеет метод класса geocode, который возвращает массив объектов адреса, полученных из геокодирования параметра метода (если геокодирование дает точное совпадение, массив будет иметь один элемент).

Одна раздражающая часть при написании этого метода - это перевод объектов адреса 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

1 Ответ

5 голосов
/ 17 июля 2009

Как насчет следующего

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
...