Использование отложенного задания при получении геокордов с помощью gmaps4rails - PullRequest
1 голос
/ 27 февраля 2012

Я смотрю на использование gem Google Maps для рельсов , но не могу понять, как я могу использовать delayed_job, чтобы получить шнуры после создания новой записи.

Кто-нибудь сталкивался с этим драгоценным камнем раньше с помощью delayed_job

Надеюсь, кто-то может посоветовать.

1 Ответ

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

Хорошо, я не уверен, сколько вы знаете о отложенной работе, поэтому я начну с нее.

Задержанное задание может использовать любой класс, который отвечает на "#perform", поэтому первое, что вам нужно, это класс для получения координат и их сохранения в вашей модели.

class GoogleMapsCoordinateService

  def perform(record)
    coords = Gmaps4rails.geocode(record.address) #This is the method that will actually return a hash of coordinates for each match it finds.

    record.update_attributes(:lattitude => coords[0][:lat], :longitude => coords[0][:lng])
  end
end

Тогда вам просто нужно поставить эту задачу в ловушку after_create в модели

class INSERTYOURMODELNAMEHERE < ActiveRecord::Base

  after_create :get_coordinates

  def get_coordinates
    Delayed::Job.enqueue GoogleMapsCoordinateService.new(self)
  end
end

Таким образом, после создания каждой записи вы поставите в очередь захват координат на заднем плане, сохраняя при этом время отклика.

...