Я работаю над проектом Rails 5.2 с моделью Place
, которая геокодируется гемом Geocoder .
Пока что все работает хорошо, за исключением случаев, когда я запускаю Place.near("a valid location")
из поиска обработки контроллера, я получаю следующую ошибку:
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*, 6371.0 * 2 * ASIN(SQRT(POWER(SIN((-31.9575512 - places.latitude) * PI() / ' at line 1: SELECT COUNT(places.*, 6371.0 * 2 * ASIN(SQRT(POWER(SIN((-31.9575512 - places.latitude) * PI() / 180 / 2), 2) + COS(-31.9575512 * PI() / 180) * COS(places.latitude * PI() / 180) * POWER(SIN((115.9160093 - places.longitude) * PI() / 180 / 2), 2))) AS distance, MOD(CAST((ATAN2( ((places.longitude - 115.9160093) / 57.2957795), ((places.latitude - -31.9575512) / 57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing) FROM `places` WHERE (places.latitude BETWEEN -32.13741552118375 AND -31.777686878816255 AND places.longitude BETWEEN 115.7040152609056 AND 116.12800333909439 AND (6371.0 * 2 * ASIN(SQRT(POWER(SIN((-31.9575512 - places.latitude) * PI() / 180 / 2), 2) + COS(-31.9575512 * PI() / 180) * COS(places.latitude * PI() / 180) * POWER(SIN((115.9160093 - places.longitude) * PI() / 180 / 2), 2)))) BETWEEN 0.0 AND 20)
Эта точная строка отлично работает при запуске из консоли Rails ...
Любые идеи о том, почему разница будет высоко ценится.
Место Модель
class Place < ApplicationRecord
...
geocoded_by :full_address
after_validation :geocode
reverse_geocoded_by :latitude, :longitude do |obj, results|
if geo = results.first
obj.place_id = geo.place_id
end
end
after_validation :reverse_geocode
def full_address
"#{title}, #{street_address}, #{suburb} #{state} #{zip}, #{country}"
end
...
end
SearchController
class SearchController < ApplicationController
def search
# places = Place.all
# places = places.where('title LIKE ?', "%#{params[:title]}%") if params[:title].present?
# places = places.near(params[:location]) if params[:location].present?
@places = Place.near("Perth, Western Australia")
# @places = places
end
end
Обновление
С момента публикации этого вопроса я обнаружил, что вызов .inspect
печатает полный ActiveRecord :: Relation, и в консоли и в представлении (то есть: с .near
, вызываемым из контроллера ) и вызов .count
приводит к появлению вышеуказанной ошибки и в консоли и в представлении. Я думаю, что это немного меняет цитату ...
Любая помощь будет высоко ценится!