在params中传递邮政编码以用于地理距离过滤器

时间:2014-12-03 21:49:55

标签: ruby-on-rails

我有思维的狮身人面像宝石,它有效。最后一部分是我无法弄清楚的。当前设置根据邮政编码属性检测当前用户的纬度和经度,并将其包含在搜索选项中。

我想稍微改变一下。保持相同的格式,但如果使用搜索表单/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

0 个答案:

没有答案