2017-12-12 5 views
0

RailsアプリケーションでGeocoder gemを使用して、Userの新しいインスタンスを作成するときにIPアドレスを取得して保存する方法がわかりません。Geocoderのrequest.ipアクセサを使用してユーザーの現在のIPを取得する方法を教えてください。

ジオコーダは、現在のIPの場所や他のいくつかの場所の情報を取得するために、このようなアクセサなど、いくつかの便利な機能を持っていますが、私はRailsのに非常に新しいですし、ドキュメントが

:-)もう少し指導があった場合、それは完璧だっただろう

は限り私はActiveRecordのを使用していて、私は次の移行を作成することで開始しました:

rails generate migration AddIpAddressToUser ip_address:float  

それから私は、アプリ/モデル/ user.rb

geocoded_by :ip_address, 
    :latitude => :lat, :longitude => :lon 
after_validation :geocode 
にこれを追加しました

Iはschema.rbに、これらの変更を追加するために、マイグレーションを実行した:

rails db:migrate    

次にUserモデルの現在のスキーマがある:User.rbは、そのスキーマに緯度、経度及びIP_ADDRESSを有しています。

私は次の方法をどのように使用できますか?

  1. request.ip Rails documentationによれば
  2. request.location

答えて

0

:あなたはのようなものを持つことができ、あなたのコントローラでindex方法で例えば

、。あなたが国の場所を取得することができます

# Adds request IP to the user to determine location. 
class MyRegistrationsController < Devise::RegistrationsController 
    def build_resource(hash={}) 
    super(hash.merge(ip_address: request.location)) 
    end 
end 

# routes.rb 
devise_for :users, controllers: { registrations: "my_registrations"} 
+0

ありがとう@max。 Deviseのデフォルトの動作を上書きしてうまく働いた – nloutre

0

:リクエストごとに

は、ルータはコントローラ とアクションキーの値を決定します。これらは、コントローラとアクションが と呼ばれるかを決定します。残りのリクエストパラメータ、セッション(利用可能な場合は )、およびすべてのHTTPヘッダーでのフルリクエストは、アクセサメソッドを使用してアクションに使用できるようになります( )。その後、実行されるのは です。

フルrequestオブジェクトは、ユーザーがあなたのウェブサイトやAPI呼び出しがコントローラで、あなたのアプリケーションに送信され訪れたとき、あなたはrequestオブジェクトへのアクセス権を持っているので、要求のアクセサ

を経由して提供されています。このデータをどのように使用するかは、あなた次第です。意識を要求されていないRailsのモデルで

def index 
    geocoder_result = request.location 
    #do something based on the geocoder_result 
end 
0

:あなたはちょうどbuild_resourceメソッドをオーバーライドすることができ考案使用している場合は

class UserController < ApplicationController 
    def create 
    @user = User.new(user_params) do |u| 
     u.ip_address = request.location 
    end 
    # ... 
    end 
end 

:だからあなたは、コントローラからそれを実行する必要があり、ユーザーにIPを割り当てますこれを使用するジオコーダに基づいて

国= ISO3166 :: Country.new(Geocoder.search(ip)。first.country_code)

私たちはこれを使用して、そのIPロケーションの国とデフォルトの通貨に関する情報を取得しています。

関連する問題