如何在模型

时间:2016-01-28 00:02:07

标签: javascript ruby-on-rails google-maps devise rails-geocoder

我打算在验证当前用户是否位于某个区域后,在rails代码上执行一些ruby。我的问题是,当使用request.location值时,我获得的纬度和经度与我从谷歌地图中获得的纬度和经度不符。 有没有其他方法可以获取用户位置?我想避免使用javascript代码,因为我需要在某个条件下编辑一个ruby模型并且我已经和它争吵了一段时间。

BTW,我正在使用设计用户模型。

我的用户模型有一个名为 signed_in 的字段,如果用户只在一个指定区域内登录,则该字段存储。

class User < ActiveRecord::Base

 def is_at_place(lat, lon)
      #place = [-17.792365,-63.182531] #this is the actual place
      place = [-17.0000, -63.0000] #this is my home
      delta = 0.003000
      #latitude range
      rlat = (place[0]+delta)..(place[0]-delta)
      #longitude range
      rlon= (place[1]+delta)..(place[1]-delta)
      if rlat.include?(lat) and rlon.include?(lon)
        return true
      else
        return false
      end
    end

def set_signed_in(latitude, longitude)
    if is_at_place(latitude, longitude)
      user = User.find(session["warden.user.user.key"][0][0])
      user.signed_in = true
      user.save
      flash.alert = "Succesfully logged in"
    else
      flash.alert = "Succesfully logged in but as a outside user"
    end
  end

我需要将纬度和经度传递给用户模型中的set_signed_in方法。

2 个答案:

答案 0 :(得分:1)

我不知道你是想把它用于手机还是电脑。

在移动设备上,您可以使用它并准确定位,在计算机上,Mac可以使用wifi来获得更精确的位置,但大多数计算机都不会。

问题是,如果您的服务器在外部可用,则会出现安全问题,因为位置欺骗很容易。

我猜这是一个小型的个人网站,你可以做的事情是自动登录更安全,就是使用你的连接IP并以此为基础登录。

答案 1 :(得分:1)

另请查看maxmind的geoip数据库,以防浏览器不向您发送标题;他们有一个基于网络的版本,也可以在本地存储。还有Teliza和Freegeoip.net。

除非用户位于某个拥有定位设施的大城市(GPS / AGPS),否则不要期望太高的准确性