Я использую Rails 3.2.16, монгоид и геокод.
Я настроил модель для своего профиля, чтобы преобразовать адрес улицы и города в долготу/широту. Это работает хорошо. У меня также есть поиск, основанный на геокоде, который тоже работает. Он ищет профили с определенными расстояниями и т. д.
Даже когда я ошибаюсь в названии города в поиске, он достаточно умен, чтобы понять, что я на самом деле имею в виду.
Однако, когда я ищу что-то, что действительно ставит геокод в тупик, например "sgervwsewerw", выдает ошибку "Извините, но что-то пошло не так". Как я могу предотвратить эту ошибку и просто не возвращать результаты? Вот информация об ошибке:
Processing by ProfilesController#index as HTML
Parameters: {"utf8"=>"✓", "profile_search"=>"sgervwsewerw"}
Rendered profiles/index.html.erb within layouts/application (137.3ms)
Completed 500 Internal Server Error in 489.6ms
ActionView::Template::Error (The operation: #<Moped::Protocol::Query
@length=208
@request_id=2
@response_to=0
@op_code=2004
@flags=[]
@full_collection_name="tango_production.profiles"
@skip=0
@limit=0
@selector={"$query"=>{"coordinates"=>{"$nearSphere"=>[NaN, NaN], "$maxDistance"=>0.0063151153689165445}}
@fields=nil>
failed with error 16433: "point not in interval of [ -180, 180 ] :: caused by :: { 0: nan.0, 1: nan.0 }"
See https://github.com/mongodb/mongo/blob/master/docs/errors.md
for details about this error.):
Вот код из моего контроллера профиля:
def index
if params[:profile_search].present?
@profiles = Profile.near(params[:profile_search], 25, :order => :distance).desc("position_order")
else
@profiles = Profile.desc("position_order")
end
end