我有思维的狮身人面像宝石,它有效。最后一部分是我无法弄清楚的。当前设置根据邮政编码属性检测当前用户的纬度和经度,并将其包含在搜索选项中。
我想稍微改变一下。保持相同的格式,但如果使用搜索表单/searches?utf8=✓&zip_code=10001
在params中传递邮政编码,则会使用params邮政编码(如果存在的话)。
我需要这个改变的两个原因:
因此,非注册用户可以执行搜索
因此,注册用户可以搜索不同的区域
这似乎是我需要添加的这一行:
:geo => [current_user.latitude * Math::PI / 180.0, current_user.longitude * Math::PI / 180.0]
搜索控制器:
def index
@search = Search.new
if location = Location.find_by_zip_code(params[:search])
latitude = location.latitude * Math::PI / 180
longitude = location.longitude * Math::PI / 180
locations = Location.search(
:geo => [latitude, longitude],
:with => {:geodist => 0.0..100_000.0},
:order => 'geodist ASC',
:per_page => 5_000
)
@users = User.where(zip_code: locations.map(&:zip_code))
else
@users = User.search(params[:query],
:conditions => {:ethnicity => params[:ethnicity], :gender => params[:gender]},
:with => {:age => (params[:min_age].to_i)..(params[:max_age].to_i), :geodist => 0.0..100_000.0},
:geo => [current_user.latitude * Math::PI / 180.0, current_user.longitude * Math::PI / 180.0],
:order => 'geodist ASC', :without => {:user_id => current_user.id})
end