我正在尝试从指定位置获取附近的用户。我有用户纬度和经度(我从他们的地址取出)。
现在,当我在搜索像“NC”这样的术语时,它会显示一些结果,但是当我使用国家名称“Unites States”搜索时,它必须显示所有结果,但它不会显示任何结果。
我正在使用Geocoder gem。 这就是我正在做的事情:
控制器:
@user = User.near(params[:search], 20, :order => :distance)
型号:
geocoded_by :address1
查看:
Displaying all the results returned from @user
任何想法我应该做什么,以便即使我使用国家名称搜索也会返回所有结果。
答案 0 :(得分:1)
当Geocoder收到类似“US”的内容时,它会选择一个中心坐标对,然后从中进行搜索。因此,在您的情况下,它将搜索距离美国中心20英里范围内的用户。
你想要做的是对搜索进行地理编码,然后找出它是哪种输入(国家等)。
所以,例如,在您的控制器中:
def search
search = Geocoder.search(params[:search]).first
if search.types.includes?('country')
@users = User.where(country: search.address)
else
@users = User.near(search.coordinates, 20) # Will be ordered by distance by default
end
end
您必须将地址组件存储在您的数据库中。
获得一致数据的最佳方法是运行自定义地理编码回调:
class User < ActiveRecord::Base
geocoded_by :address do |obj, results|
if result = results.first
obj.street = result.street_address
obj.zip = result.postal_code
obj.city = result.city
obj.country = result.country
obj.latitude = result.latitude
obj.longitude = result.longitude
end
end
after_validation :geocode, if: :address_changed?
def address
"#{street}, #{zip} #{city}, #{country}"
end
def address_changed?
street_changed? || city_changed? || zip_changed? || country_changed?
end
end
答案 1 :(得分:0)
@delba接受的答案很棒,只有一个小错误,就是Ruby没有数组的<style>
div {
border: 2px solid black;
}
#main {
width: 107px;
height: 107px;
padding: 0;
text-align: center;
font-size: 10px;
}
#tl, #tr, #bl, #br {
width: 45px;
height: 45px;
margin-top:3px;
margin-left:3px;
float:left;
}
#bl, #br {
margin-bottom:3px;
}
</style>
谓词,而是:includes?
。
所以它应该是:include?
。