使用延迟作业获取gmaps4rails的地理坐标

时间:2012-02-27 13:05:50

标签: ruby-on-rails delayed-job gmaps4rails

我正在考虑使用gem google maps for rails,但无法看到如何在创建新记录后使用delayed_job来获取线索。

在使用delayed_job

之前,有没有人遇到过这个gem

希望有人可以提供建议。

1 个答案:

答案 0 :(得分:3)

好吧,我不确定你对延迟工作有多了解,所以我会从那里开始。

延迟工作可以利用任何响应'#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

这样,在创建每条记录之后,您将排队抓取背景中的坐标,同时保持响应时间快速。