2016-05-05 3 views
0

私はgeogoder gemですべてのジオコードされたサービスのリストを持っています。Mysql2 :: Error:...ジオコーダーの宝石で `near`を呼び出すとき

Service.near("London")を呼び出すと、

ActiveRecord::StatementInvalid: 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

Service.near("London").to_sql

を投げるには問題なく動作しますdistance_between

SELECT services.*, MOD(CAST((ATAN2(((services.longitude - -4.8824474)/57.2957795), 
     ((services.latitude - 36.510071)/57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing 
FROM `services` 
WHERE (services.latitude BETWEEN 36.220607433778305 AND 36.7995345662217 
    AND services.longitude BETWEEN -5.242587667147616 AND -4.522307132852385 
    AND() BETWEEN 0.0 AND 20) 
ORDER BY distance ASC 

を与えます。

誰も私が間違っているとアドバイスできますか?あなたが働いてSQLを合成するジオコーダの宝石ために適切なパラメータを送信する必要が事前

答えて

0

を。モデルで左

これはSQL構文が出てスローされる原因となった

acts_as_mappableました。

+1

それが起こると私は嫌い!その後... – Elvn

0

感謝。 gem documentation

は、それについて確かに明示していないが、あなたは完全にあなたのケースのために

nearbys = Place.near("Omaha, NE", 50,:order => "distance") 

総称的

nearbys = Model.near("Gecodeable address string", N (range constant), order: parameter) 

を指定するパラメータのすべてを必要とする、私がしようとお勧めしたいですあなたがMySQLエラーを過ぎてしまうかどうかを確認するには、

@result = Service.near("London, UK", YOUR_DISTANCE_CONSTANT, order: false) 

これはどれくらい役に立ちましたか分かりませんが、これは私のモデルの1つでSQLの.nearが生成されたものです。私は地理座標を渡すと、「アクティブ」フラグテストしていた:i明らかに添加し、次いでGeokit宝石を削除していたいくつかの点で

[1m[36mAnimalRescue Load (0.0ms)[0m [1mSELECT animal_rescues.*, 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((30.326374 - animal_rescues.latitude) * PI()/180/2), 2) + COS(30.326374 * PI()/180) * COS(animal_rescues.latitude * PI()/180) * POWER(SIN((-97.771258 - animal_rescues.longitude) * PI()/180/2), 2))) AS distance, MOD(CAST((ATAN2(((animal_rescues.longitude - -97.771258)/57.2957795), ((animal_rescues.latitude - 30.326374)/57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing FROM "animal_rescues" WHERE "animal_rescues"."active_listing" = 't' AND (animal_rescues.latitude BETWEEN 29.77639322417878 AND 30.876354775821223 AND animal_rescues.longitude BETWEEN -98.40842692015944 AND -97.13408907984056 AND (3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((30.326374 - animal_rescues.latitude) * PI()/180/2), 2) + COS(30.326374 * PI()/180) * COS(animal_rescues.latitude * PI()/180) * POWER(SIN((-97.771258 - animal_rescues.longitude) * PI()/180/2), 2)))) BETWEEN 0.0 AND 38) ORDER BY delivery_item_count + dropoff_item_count DESC LIMIT 3[0m

+0

ありがとうございます。しかし、これを何回も渡しても、同じエラーが発生します。宝石は実際には最後の2つのパラメータをデフォルトにしますので、設定する必要はありません。奇妙なことは、それは完璧に同じアプリ内の別のモデルで動作します。 –

+0

ジオコーディング可能ではない "ロンドン"を渡すことはできません。そして、あなたは「近所」が意味するものを制限する距離を必要とします。 – Elvn

+0

私はあなたに幸運を祈ります。私はジオコーダーと。広範囲に使用し、パラメータを完全に指定していないと、.nearで生成された無効なSQLを見てきました。しかし、たぶんあなたはその周りに道を見つけるでしょう。 – Elvn

関連する問題