当我在附近搜索一个地方附近的修理店时,我得到了一个突然的错误,当我用它来搜索一个地方附近的修理店时。我正在使用地理编码创业板,以地理编码的维修商店的创建。
假设我将查询称为:
Repairshop.where(:approved => true).group(:title).count我得到了正确的结果,如散列:{"my title" => 1}和一切都很好。
现在,当我在城市或州调用组,然后依赖结果时,我得到一个Mysql2错误:
让我分几步展示一下:
给出了主动记录关系与我的标题修理厂,它工作良好,查找与近查询。

我得到如下错误:

Mysql2 2::error : SQL语法中有一个错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法以使用接近“*,3958.755864232 *2*ASIN”(SQRT(电源(SIN(43.0481221- repairshops.latitude) )在第1行:选择不同的计数。*,3958.755864232 *2*ASIN(SQRT(POWER(43.0481221- repairshops.latitude) * PI() / 180 / 2),( 2) + COS(43.0481221 * PI() / 180) * COS(repairshops.latitude * PI() / 180) *幂(SIN(-76.14742439999999- repairshops.longitude) * PI() / 180 / 2)作为距离,MOD(CAST(repairshops.longitude -76.14742439999999) / 57.2957795),(repairshops.latitude-43.0481221/ 57.2957795) *57.2957795)+ 360小数),(如count_repairshops_all_3958_755864232_all_2_all_asin_sqrt_power_sin_43_0481221_repairshops_latitude_all_pi_180_2_2_cos_43_0481221_all_pi_180_all_cos_repairshops_latitude_all_pi_180_all_power_sin_76_14742439999999_repairshops_longitude_all_pi_180_2_2_as_dis,)从
repairshops的repairshops.approved=1和(repairshops.latitude在40.153486437783044到45.94275776221696之间,repairshops.longitude在-80.10844293387429到-72.1864058661257之间和(3958.755864232 *2*ASIN)(功率(SIN(43.0481221- repairshops.latitude) * PI() / 180 / 2),( 2) + COS(43.0481221 * PI() / 180) * COS(repairshops.latitude * PI() / 180) *幂(SIN(-76.14742439999999- repairshops.longitude) * PI() / 180 /2,2) 0~2 0)群,按repairshops.city排序
Repairshop模型类如下所示,我已经安装了geocoder:
class Repairshop < ActiveRecord::Base
geocoded_by :full_address
after_validation :geocode
end在SQLite中,一切都很完美,但是在这里,链接时会出现一个错误。我没有直接使用MySQL语法,所以不知道问题出在哪里。
注意:我正确地完成了MySQL2设置,并使用本地服务器进行开发。组(:.count)对于与位置无关的其他字段很好地工作
会很感激你的帮助。
发布于 2018-01-25 04:44:19
Geocoder gem似乎正在以与#group不兼容的方式重写select子句。使用子选择可能是一种解决方案:
Repairshop.where(
id: Repairshop.where(
:approved => true
).near(
'syracuse', 200
).select(:id)
).group(
:city
).count发布于 2018-01-26 00:00:02
工作解决办法是使用:
Repairshop.where(id: repairshop.near(params[:location], params[:radius]).map{|i| i.id})而不是Repairshop.near(params[:location], params[:radius]),然后运行组和计数
但如果有人能提出更好的解决方案。会很感激的!
https://stackoverflow.com/questions/48434348
复制相似问题