1

我正在尝试以一种可以限制使用 DelayedJob 的地理编码 api 调用流的方式在我的 Rails 应用程序中处理地理编码。

我的意图只是对地理编码请求进行排队,因为它们对用户的时间不敏感。此外,我正在使用一个免费的地理编码 API (Nominatim),它每秒只需要一个请求。

我已经设置了地理编码器 gem,在我的用户模型中,我从用户帐户设置中获取了邮政编码(它不能为空,我已经在验证它)。

我的想法是使用 run_at 开始限制调用,但 run_at 的初始测试显示作业正在排队,但地理编码未保存完成时的值。

after_validation :run_geocode, :if => :postcode_changed?

def run_geocode
   self.delay(:run_at => 30.seconds.from_now).geocode
end

我在这里错过了一些非常明显的东西吗?我无法锻炼文档所说的 :geocode 方法的用途。

4

1 回答 1

1

如果您不在任何地方调用保存,则可能不会保存地理编码的响应。此外,通常在保存/更新/删除记录后而不是在验证后运行回调。

after_save :run_geocode, :if => :postcode_changed?

def run_geocode
  self.delay.geocode! # delayed_job will process geocode! at a later point in time
end

def geocode!
  # do whatever is nescessary to receive geocoded infos
  # assign the results
  # save the record to save the updates
  self.save
end
于 2013-03-27T21:51:20.773 回答