4

IP アドレスを介してユーザーをローカライズしようとしています。ドキュメントが言うように、 と呼ばれるクラス メソッドgeocode_ip_addressが に混在していActionController::Baseます。しかし、私が見逃しているものがあるに違いありません。フィルターを使用するには、このようなフィルターを定義する必要がbefore_filter :geocode_ip_addressありますか? (すべてのリクエストの場所を知りたい)。

ドキュメントには、「初回ルックアップにより、GeoLoc クラスがセッションに保存される:geo_location」ことについても説明されていますが、確かにセッション ハッシュ内にそのキーはありません。

私は何を間違っていますか?

ありがとう。

4

1 に答える 1

5

before_filterを geocode_ip_address の前に追加する必要はありませんが、コントローラーに追加するだけです。

class YourController < ApplicationController
  geocode_ip_address

  def action
    if geo = session[:geo_location]
      # geo here is a Geokit::GeoLoc object
    end
  end
end

ジオコーディングが失敗した場合、geoは nil になることに注意してください。開発中の場合は、127.0.0.1 をジオコーディングしようとするので、リクエスト オブジェクトに remote_ip を設定する必要があります。これをconfig/environments/development.rbの一番下に追加することでそうしました:

class ActionDispatch::Request
  def remote_ip
    "x.x.x.x" # fill in your IP address here
  end
end
于 2011-05-10T16:16:07.653 に答える