Итак, в настоящее время у меня есть приложение, размещенное на героку.
Я использую devise gem для аутентификации всех пользователей.
Я хочу, чтобы пользователь мог проверить свое текущее местоположение на карте, и для этого я использую гем геокодера.
Однако после входа в систему IP-адрес пользователей регистрируется, но их значения долготы и широты не меняются и остаются «нулевыми».
Если я зайду в свою консоль rails и дам current_sign_up_ip другое значение, тогда он начнет работать.
Вот как сейчас выглядит мой файл User.rb:
class User < ApplicationRecord
attr_accessor :firstname, :lastname
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:facebook , :google_oauth2]
geocoded_by :current_sign_in_ip
after_validation :geocode
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.firstname = auth.info.firstname
end
end
end
И вот как на данный момент выглядит мой вид, отображающий карту:
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<% if user_signed_in? %>
<div style="'width: 800px">
<div id = "map" style = "width: 800px; height: 400px;"></div>
</div>
<script type="application/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers([
{
"lat": (<%= current_user.latitude %>),
"lng": (<%= current_user.longitude %>),
"picture": {
"url":
"https://i.pinimg.com/736x/4e/e8/fb/4ee8fbf4312a171c9e344abb30c65e21.jpg",
"width": 32,
"height": 32
},
"infowindow": "hello!"
}
]);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
</script>
<% else %>
<% end %>
Таким образом, проблема, с которой я сталкиваюсь, заключается в том, что даже несмотря на то, что «current_sign_in_ip» имеет значение долготы и широты пользователя в точке, он не геокодируется.
Это работает, если я заставляю пользователя вводить свой текущий IP-адрес при входе в систему.