【问题标题】:devise after_sign_in update attributes with geocoder and devise设计 after_sign_in 使用地理编码器更新属性并设计
【发布时间】:2015-02-24 01:34:40
【问题描述】:

当用户登录网站时,我希望地理编码器获取 current_sign_in_ip 并将其转换为可用的纬度:经度:我该怎么做?

我的用户模型-

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

【问题讨论】:

    标签: ruby-on-rails model devise rails-geocoder


    【解决方案1】:

    为了让geocode记录下经纬度。您需要将纬度和经度字段添加到您的数据库表。假设您使用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 控制台rails c 验证它

    u = User.find_by_email("your_login@email.com")
    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 记录。否则,纬度和经度字段将为nil。

    【讨论】:

    • 我已经完成了所有这些,但纬度和经度仍然为零
    • 不,因为我试图在我的网站上登录后进行地理编码。所以,如果有人登录,我会收到他们的 ip 并将其更改为纬度、经度。
    • 您是否尝试从 rails 控制台查看 current_sign_in_ip 字段?你有什么ip?或者您可以将这条线after_validation :geocode, if: :current_sign_in_ip_changed? 的用户模型设置更改为after_validation :geocode ,并使用rails 控制台手动更新current_sign_in_ip 和真实IP。您应该会看到纬度和经度得到更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多