Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从控制器操作调用Geocoder.near()抛出MySQL语法错误-Rails 5.2_Ruby On Rails_Ruby_Google Maps Api 3_Rails Geocoder - Fatal编程技术网

Ruby on rails 从控制器操作调用Geocoder.near()抛出MySQL语法错误-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 *

我正在做一个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 * 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
总是激发额外的查询,即使关系已经加载(您可能想阅读此内容)。请看我的最新答案。