0

nearPostgres データベースを使用する Rails アプリケーションで Ruby ジオコーダー gemのメソッドを使用しようとしています。

 @users = Contact.near(params[:search], params[:distance])

その行は、以下に示す「operator does not exist エラー」を生成します。検索パラメータはアドレスとdistになります

Contact.rb モデルではこれを行います

geocoded_by :full_address

 def full_address

   self.address + self.city + self.province + self.postal
 end 

私が間違っている可能性があることを教えてもらえますか?エラーには、「明示的な型キャストを追加する必要がある可能性があります」と書かれています。

Addresscityprovinceおよびpostalはすべて文字列です。

PG::Error: ERROR: operator does not exist: numeric - character varying LINE 1: ...8.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.7058645 - contacts... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. : SELECT contacts.*, 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.7058645 - contacts.latitude) * PI() / 180 / 2), 2) + COS(43.7058645 * PI() / 180) * COS(contacts.latitude * PI() / 180) * POWER(SIN((-79.3687137 - contacts.longitude) * PI() / 180 / 2), 2))) AS distance, CAST(DEGREES(ATAN2( RADIANS(contacts.longitude - -79.3687137), RADIANS(contacts.latitude - 43.7058645))) + 360 AS decimal) % 360 AS bearing FROM "contacts" WHERE (contacts.latitude BETWEEN 43.676918143377826 AND 43.73481085662217 AND contacts.longitude BETWEEN -79.40875589075141 AND -79.3286715092486 AND 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.7058645 - contacts.latitude) * PI() / 180 / 2), 2) + COS(43.7058645 * PI() / 180) * COS(contacts.latitude * PI() / 180) * POWER(SIN((-79.3687137 - contacts.longitude) * PI() / 180 / 2), 2))) <= '2') ORDER BY distance ASC LIMIT 1
4

0 に答える 0