Rails GeoCoder, просматривая существующую базу данных и geocode_by: address,: city,: state - PullRequest
3 голосов
/ 09 февраля 2012

Я импортировал CSV-файл с 10 000 местоположений, и мне нужно перебрать базу данных и geocode_by по нескольким полям, а не по обычному «geocode_by: address»

Я использую гем геокодера.

Моя схема базы данных выглядит следующим образом

    create_table "locations", :force => true do |t|
      t.string   "Address"
      t.string   "City"
      t.string   "State"
      t.string   "Zip"
      t.float    "latitude"
      t.float    "longitude"
      t.datetime "created_at"
      t.datetime "updated_at"
    end 

Могу ли я сделать это в действии контроллера, а не при проверке?Должен ли я сделать что-то вроде этого:

 def index
    @locations = Location.all
    @locations.each do |l|
        new_address = "#{l.Address} #{l.City} #{l.State}"
        geocode_by = :new_address
    end
 end

Но да, любая помощь очень ценится, спасибо!

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Я смог заставить все работать с этим кодом контроллера:

  def index
    if params[:search].present?
      @locations = Location.near(params[:search], 20, :order => :distance)
    else
      @locations = Location.all
      @locations.each do |l|
        if l.latitude.nil?
          new_location = "#{l.HP_Address_1} #{l.HP_City} #{l.HP_State}"
          s = Geocoder.search(new_location)
          l.latitude = s[0].latitude
          l.longitude = s[0].longitude
          l.save
        end
      end
    end
  end

Он проходит по каждой записи в базе данных, и если значения широты и долготы не были закодированы, он вызывает правильную функцию геокодераи сохраняет возвращенные значения lat / long в базе данных.

У меня есть 9k записей в моей базе данных, поэтому я могу кодировать только 2k в день из-за ограничения на API карт Google.Но для людей, привыкших кодировать записи при создании с использованием geocoded_by в своих моделях, это будет работать в контроллерах.

1 голос
/ 14 февраля 2014

Для этого есть задача rake, если вы хотите сделать каждую запись в классе.

rake геокод: все CLASS = YourModel sleep = 0.25

1 голос
/ 09 февраля 2012

Это то, что я бы делал с работниками (отложенная работа или перераспределение), так как это может занять некоторое время. Но я не уверен, что понял вопрос, так что это может быть не тот ответ, который вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...