我想知道解决这个问题的最佳方法是什么。我有一个搜索功能,如下所示:
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
现在我想要做的是添加搜索功能,允许人们搜索他们输入的邮政编码50英里内的事件。
我的事件表中有一个邮政编码字段,其中包含所有事件位置的邮政编码。
最好的方法是什么? (简单,如果可能的话,有点像握住你的手指导会很棒!)
萨姆
答案 0 :(得分:0)
查看geocoder gem。数据库或Rails中不支持本机邮政编码搜索,但您可以使用地理编码服务获取您存储的每个地址的纬度和经度。这涉及将这些列添加到您的数据库中。
geocode
有很好的文档,它可以帮助你进行地理编码(获取lat / lng)和按距离搜索(尽管你也可以使用searchkick
)