2017-04-06 1 views
0

Je me demande quelle serait la meilleure façon d'y remédier. J'ai une fonction de recherche qui ressemble à ceci:searchkick trouver dans le rayon de l'emplacement

def search 
    search_options = { 
     misspellings: { edit_distance: 2 }, 
     fields: [:eventname, :date], 
     order: { date: :asc, eventname: :asc }, 
     match: :word_start, 
     suggest: true, 
     page: params[:page], 
     per_page: 20 
    } 
    if params[:date_from].present? 
     datefrom = params[:date_from].to_datetime.strftime('%Y-%m-%d') 
     dateto = params[:date_to].to_datetime.strftime('%Y-%m-%d') 
     search_options[:where] = { date: {gte: datefrom, lte: dateto} } 
    end 

    @events = Event.search params[:search], search_options 
    if @events.results.any? 
     render 'events/results' 
    else 
     @popevents = Event.limit(3).order('RANDOM()') 
     render 'events/noresults' 
    end 
    end 

Maintenant, ce que je suis désireux de faire est d'ajouter une fonctionnalité de recherche qui permettrait aux gens de rechercher des événements à moins de 50 miles de leur code postal qu'ils entrent.

J'ai un champ de code postal dans ma table d'événements avec le code postal de tous les endroits d'événements.

Quelle serait la meilleure façon de faire cela? (Simple si possible un peu comme un guide de tenir votre main serait étonnant !!)

Sam

Répondre

0

Jetez un oeil à la geocoder gem. Il n'y a pas de support sur la base de données ou dans Rails pour la recherche par code postal natif, mais vous pouvez utiliser un service de géocodage pour obtenir la latitude et la longitude pour chaque adresse que vous stockez. Cela implique d'ajouter ces colonnes à votre base de données.

geocode a une bonne documentation, et il vous aidera à la fois avec géocodage (obtenir le lat/lng) et la recherche par la distance (mais vous pouvez également utiliser searchkick pour ce dernier)