Ruby on rails 从控制器操作调用Geocoder.near()抛出MySQL语法错误-Rails 5.2
我正在做一个Rails 5.2项目,它有一个Ruby on rails 从控制器操作调用Geocoder.near()抛出MySQL语法错误-Rails 5.2,ruby-on-rails,ruby,google-maps-api-3,rails-geocoder,Ruby On Rails,Ruby,Google Maps Api 3,Rails Geocoder,我正在做一个Rails 5.2项目,它有一个Place模型,由 到目前为止,一切似乎都很正常,除了从控制器处理搜索运行Place.near(“有效位置”)时,我得到以下错误: 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 *
Place
模型,由
到目前为止,一切似乎都很正常,除了从控制器处理搜索运行Place.near(“有效位置”)
时,我得到以下错误:
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控制台执行时,这一行可以完美地工作
如果您有任何关于差异原因的想法,我们将不胜感激
放置模型
上课地点
SearchController
class SearchController
更新
自从发布这个问题以来,我发现调用.inspect
会在控制台和视图中打印一个完整的ActiveRecord::Relation,两者都(即:从控制器调用.near
),调用.count
会在控制台和视图中产生上述错误。我想这会改变一些事情
任何帮助都将不胜感激 地理代码gem和Rails对关系的计算所构建的
near
范围似乎不能很好地结合在一起
只需强制Rails加载关系,然后再对其调用其他方法,如any?
或blank?
@places = Place.near("Perth, Western Australia").load
并在视图中使用
@places.size
而不是@places.count
,因为size
不会触发额外的数据库查询,而是在关系已加载时返回数组元素数。在视图中调用@places
上的count
或any?
吗?@spickermann yes,在@places
上首次使用时会引发错误。感谢您的回复!我已尝试按照您的建议添加.load
,但它没有修复或更改错误。我得到了同样的回答……是的,你是对的。我忘了,count
总是激发额外的查询,即使关系已经加载(您可能想阅读此内容)。请看我的最新答案。