我正试图在我的Rails应用程序中处理地理编码,以便我可以使用DelayedJob限制地理编码api调用的流程。
我的目的只是排队地理编码请求,因为它们对用户没有时间敏感性。此外,我使用的免费地理编码API(Nominatim)每秒只需要一个请求。
我有geocoder 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
我错过了一些非常明显的东西吗?我不能只训练文档所说的地理编码方法。
答案 0 :(得分: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