我正在尝试实现一种获取访问者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的新手,所以我不确定我是否在代码和结构方面做得正确。任何输入都会有所帮助。
答案 0 :(得分:1)
1)迁移不是您应该填充任何数据的地方,您可以在db / seeds.rb文件中添加数据填充(通常运行:rake db:create; rake db:migrate; rake分贝:种子)。如果您不喜欢db / seeds.rb,则可以添加自定义Rake任务。
2)Geocoder没有开箱即用的功能,您可以做的是将主要城市存放在桌子上,具有纬度和经度,然后进行地理IP查询以检查用户是什么纬度/经度,并使用地理编码器搜索更近的主要城市(Model.near)到用户纬度/经度。
3)
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) %>