разработать атрибуты обновления after_sign_in с помощью геокодера и разработки

Когда пользователь входит на веб-сайт, я хочу, чтобы геокодер взял current_sign_in_ip и преобразовал его в полезную широту: долготу: как я могу это сделать?

моя модель пользователя-

geocoded_by :current_sign_in_ip
after_validation :geocode, :if => :current_sign_in_ip_changed?

person Dylan Little    schedule 24.02.2015    source источник


Ответы (1)


Чтобы геокод записал широту и долготу. Вам нужно добавить поля широты и долготы в таблицу БД. Допустим, вы используете таблицу users.

Сначала добавьте миграцию

rails generate migration AddLatitudeLongitudeToUsers

Измените миграцию следующим образом.

class AddLatitudeLongitudeToUsers < ActiveRecord::Migration
  def change
    add_column :users, :latitude, :float
    add_column :users, :longitude, :float
  end
end

Запустите rake db:migrate, чтобы сохранить изменения.

Добавьте следующую настройку геокода в пользовательскую модель

class User < ActiveRecord::Base
  geocoded_by :current_sign_in_ip
  after_validation :geocode, if: :current_sign_in_ip_changed?
end

Поскольку большинство из нас тестирует и разрабатывает приложение на нашем локальном компьютере, current_sign_in_ip будет записываться как «127.0.0.1» после входа в систему.

Вы можете проверить это из консоли рельсов rails c

u = User.find_by_email("[email protected]")
u.current_sign_in_ip
u.latitude
u.longitude

Чтобы посмотреть, работает геокодер или нет, давайте изменим ip вручную.

u.current_sign_in_ip = "199.182.122.98"
u.save
u.latitude
u.longitude

После входа в систему убедитесь, что в поле current_sign_in_ip отсутствует IP-запись. В противном случае поля широты и долготы будут нулевыми.

person Tim    schedule 24.02.2015
comment
Я сделал все это, но широта и долгота все еще равны нулю - person Dylan Little; 24.02.2015
comment
нет, потому что я пытаюсь выполнить геокодирование после sign_in на своем веб-сайте. Итак, если кто-то входит в систему, я получаю его IP-адрес и меняю его на широту и долготу. - person Dylan Little; 24.02.2015
comment
Вы пытались просмотреть поле current_sign_in_ip из консоли rails? Какой у тебя айпи? Или, может быть, вы можете изменить настройку модели пользователя для этой строки after_validation :geocode, if: :current_sign_in_ip_changed? на after_validation :geocode и использовать консоль rails вручную, чтобы обновить current_sign_in_ip с реальным ip. Вы должны увидеть, что широта и долгота обновились. - person Tim; 25.02.2015