Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用Geocoder从城市列表中自动显示用户的城市_Ruby On Rails_Ruby_Geocoding - Fatal编程技术网

Ruby on rails 如何使用Geocoder从城市列表中自动显示用户的城市

Ruby on rails 如何使用Geocoder从城市列表中自动显示用户的城市,ruby-on-rails,ruby,geocoding,Ruby On Rails,Ruby,Geocoding,我正在尝试实现一种功能,它获取访问者的IP地址,并在站点的标题中返回城市名称 但是,该城市需要从人口预先确定的城市列表中删除。我将用美国主要城市的列表来填充该列表 我的问题分为三个部分: 填充主要城市静态列表的最佳方式是什么?是否通过迁移? 如何使用Geocoder仅返回预填充列表中的城市?一些城市将是较小的城市,我想根据它们与这些城市的接近程度将它们合并成较大的城市 如何在标题中将城市显示为下拉列表,并根据用户的IP将默认设置为用户的城市,但也允许用户从该下拉列表中选择其他城市? 目前,我正在

我正在尝试实现一种功能,它获取访问者的IP地址,并在站点的标题中返回城市名称

但是,该城市需要从人口预先确定的城市列表中删除。我将用美国主要城市的列表来填充该列表

我的问题分为三个部分:

填充主要城市静态列表的最佳方式是什么?是否通过迁移? 如何使用Geocoder仅返回预填充列表中的城市?一些城市将是较小的城市,我想根据它们与这些城市的接近程度将它们合并成较大的城市 如何在标题中将城市显示为下拉列表,并根据用户的IP将默认设置为用户的城市,但也允许用户从该下拉列表中选择其他城市? 目前,我正在使用专用的Location.rb模型和locations_controller.rb控制器

在我的模型中:

reverse_geocoded_by :lat, :lon do |obj,results|
  if geo = results.first
    obj.city    = geo.city
  end
end
after_validation :reverse_geocode
在我的控制器中:

def index
    @ip = request.remote_ip
    @locations = Location.all
    @city = result.city
end
在我的标题部分:

<%= collection_select(@cities) %>

我是Rails和GeoCoder gem的新手,所以我不确定在代码和结构方面是否做得正确。任何输入都会有帮助。

1迁移不是填充任何数据的地方,您可以在通常运行的文件db/seeds.rb中添加数据填充:rake db:create;rake-db:迁移;rake db:种子。如果您不喜欢db/seeds.rb,可以添加一个定制的Rake任务

2 Geocoder没有现成的功能,您可以做的是将主要城市及其纬度和经度存储在表中,然后执行地理ip查询以检查用户纬度/经度,并使用Geocoder搜索主要城市更接近用户的模型。靠近用户lat/long

三,

def index
  @ip = request.remote_ip
  @locations = Location.all
  @lat, @lng = write_code_to_get_user_lat_and_lng
  @city = Location.near([@lat, @lng], maximum_radius_in_miles).first
end

<%= select_tag('user_city', options_for_select(@locations.collect {|l| [l.name. l.id]}, @city.id) %>