1

DelayedJob を使用してジオコード API 呼び出しのフローを制限できるように、Rails アプリでジオコーディングを処理しようとしています。

私の意図は、ユーザーにとって時間に敏感ではないため、ジオコーディング リクエストをキューに入れることだけです。また、1 秒あたり 1 回のリクエストしか必要としない無料のジオコーディング API (Nomintim) を使用しています。

ジオコーダーの宝石をセットアップしました。ユーザー モデルでは、ユーザー アカウントのセットアップから郵便番号を取得します (空白にすることはできず、既に検証中です)。

私の考えは、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

save をどこにも呼び出さないと、ジオコーディングされた応答が保存されない可能性があります。また、検証後ではなく、レコードの保存/更新/削除後にコールバックを実行するのが通例です。

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 に答える