2017-12-12 7 views
0

사용자의 새 인스턴스를 만들 때 내 Rails 앱에서 지오 코더 젬을 사용하여 IP 주소를 가져오고 저장하는 방법을 찾는 데 어려움을 겪고 있습니다.Geocoder의 request.ip 접근자를 사용하여 현재 사용자의 IP를 가져 오는 방법은 무엇입니까?

지오 코더는 현재 IP 위치와 다른 위치 정보를 얻기 위해 같은 접근과 같은 몇 가지 유용한 기능을 가지고 있지만 나는 레일 아주 새로운 해요 및 설명서가

:-) 좀 더 지침이 있다면 그것은 완벽했을 것이다 I 앱/모델/user.rb

geocoded_by :ip_address, 
    :latitude => :lat, :longitude => :lon 
after_validation :geocode 
,536이 점을 추가 한

다음
rails generate migration AddIpAddressToUser ip_address:float  

:

는만큼 내가 액티브를 사용하고 있습니다 나는 다음과 같은 마이그레이션을 생성하여 시작

rails db:migrate    

이제 사용자 모델의 현재 스키마가 : User.rb는 스키마에 위도, 경도 및 IP_ADDRESS을 가지고

나는 schema.rb에서 이러한 수정을 추가 할 수있는 마이그레이션을 실행했습니다.

어떻게 거기에 다음과 같은 방법을 사용할 수 있습니까?

  1. request.ip Rails documentation 따르면
  2. request.location

답변

0

: 당신이 뭔가를 할 수 있습니다 컨트롤러의 index 방법 예를 들어

.

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

그냥 build_resource 메소드를 오버라이드 (override) 할 수 있습니다를 고안 사용하는 경우 :

# 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 헤더에 대한 전체 요청은 접근 자 메서드를 통해 동작에 사용 가능하게됩니다 ( ). 그런 다음 수행 된 작업은 입니다.

전체 요청 객체는 사용자가 웹 사이트를 방문하거나 API 호출 응용 프로그램에 보낼 때, 컨트롤러, 당신은 request 개체에 액세스 할 수있는 요청 접근 그래서

를 통해 사용할 수 있습니다. 이 데이터를 사용하는 방법은 귀하에게 달려 있습니다. 모델은 인식 요청되지 않은 레일에서

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

당신이 국가 위치를 얻을 수 있도록 당신이 컨트롤러에서 작업을 수행하는 데 필요한 사용자에게 IP를 할당 이를 사용하는 지오 코더를 기반으로합니다.

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

우리는 이것을 사용하여 해당 IP 위치의 국가 및 기본 통화 정보를 얻습니다.